C语言回顾-指针
1.指针:地址
指针变量:存放指针的变量
指针变量的定义:数据类型 *指针变量名 或者 数据类型* 指针变量名
指针变量的初始化:int *p=&a;int *p=NULL;(不能先定义后初始化)
用*p获取指针变量指向的内存空间
如果指针变量定义以后不进行初始化,这个指针变量存放的是一个垃圾数,这个指针变量,称为野指针
用函数实现变量值的交换,传递指针
//
// main.c
// 变量值交换
//
// Created by fanyafang on 15/11/4.
// Copyright 2015年 itcast. All rights reserved.
// #include <stdio.h>
void change(int *a,int *b){
//用两个指针变量接收地址
//交换地址中所存的内容
//这样函数执行完以后,指针所指向的内容已经发生了改变
int temp=;
temp=*b;
*b=*a;
*a=temp;
} int main(int argc, const char * argv[]) {
int a=,b=; change(&a,&b); printf("a=%d,b=&b",a,b); return ;
}
2.指针的应用场景
1)在被调函数中可以修改主调函数的值
2)让函数可以有多个返回值(把地址传过去,可以修改地址指向的值)
3.二级指针
int **p1=&p;//p是一个一级指针
4.数组指针
指向数组的首地址
int a[4]={1,2,3,4};
int *p=a;
p+1指向数组的下一个元素
p-1指向数组的上一个元素
*(p+1)取得p+1对应的存储单元的内容
*(a+1)同上
*p++相当于*(p++)
*a++这样写是错误的,因为a是一个常量
5.一维指针数组
int a=0,b=0,c=0;
int *pa[3]={&a,&b,&c};//数组的值是地址
6.指针变量之间的运算-相减 判断两个指针变量之间相隔几个元素
7.用数组名访问二维数组
二维数组可以看做是特殊的一维数组
a;a+1;a+2是行指针
a[i]+j是列指针
第一行的首地址a[1]或a+1;
第二行第一个元素的地址:*(a+1)或者&a[1][0]
a=&a[0]=&a[0][0]=a[0]

8.二维数组指针-指向二维数组的指针
int a[2][3];
int (*p)[3]=a;//定义行数组指针
p=a;
p+1指向第一行
二维数组指针可以替代数组名使用
9.指针数组和二维数组指针的区别
指针数组int *p[3];//数组里放的是地址,是多个指针
二维数组指针 int (*p)[3];//指向二维数组的指针,是一个指针
C语言回顾-指针的更多相关文章
- <2014 04 15> C++语言回顾精要(原创By Andrew)
C++语言回顾精要 <Visual C++程序设计>张岳新,这本书是很多学校的本科生C++教学用书,今天重新拿来翻了一遍.跟很多国人写的技术书籍一样,写书并不是为了让初学者看懂入门,而是为 ...
- 浅谈c语言的指针
对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- C语言二重指针与malloc
(内容主要源于网上,只是加入了些自己的剖析) 假设有一个二重指针: char **p; 同时有一个指针数组 char *name[4]; 如何引用p呢? 首先我们有程序代码如下 #include &l ...
- C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...
- 为什么C/C++语言使用指针
这是参加面试时,面试官问的一道开放性题目. 问题是:为什么C/C++语言使用指针? 这个问题一问出来,直接被面试官秒杀了,面试官大神,你怎么不按套路出牌啊? 说好的malloc和new的区别呢?说好的 ...
- C语言的指针变量
C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...
- “对外部(局部)变量的访问”是C语言函数指针的最大弱点
1.“对外部(局部)变量的访问”是C语言函数指针的最大弱点 . #include <stdio.h> #include <stdlib.h> /* 结构体定义 */ struc ...
随机推荐
- plist文件里的"Bundle versions string, short" 跟 "Bundle version" 的区别及作用
Bundle versions string, short:用于itunes上显示的版本号,即对外的版本,一般除了版本迭代外,不能随意更改. Bundle version:内部项目管理的版本号,是给程 ...
- PHP连接数据库的方法
mysql可通过两种方式通过PHP和web相连,一种通过php的mysql相关函数,另一种通过php的ODBC相关函数. 相关函数如下: MYSQL函数 mysql_affected_rows: 得到 ...
- Unity学习疑问记录之界面适配
Unity3d UGUI 界面适配 实例解析 三种适配方式 http://www.mamicode.com/info-detail-475563.html
- CSS3的高级特性
CSS3对响应式设计非常有用:使用CSS3替代图片,在有带宽限制的网页中可有效减少http请求(从而使网页加载更快),并可使网页更灵活.更容易维护. 在开发CSS3时,要记住添加相关的浏览器私有前缀以 ...
- 安卓初級教程(2):SD創建file,儲存與讀寫的方法(1)
package com.sdmadik; import java.io.*; import android.app.Activity; import android.os.Bundle; import ...
- equals和==的区别
---恢复内容开始--- equals:用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同. 1.第一:对象不同,内容相同: ==:等于.比较两个地址是不是一样的(地址一样值肯定一样)(比 ...
- office 365 online api
https://view.officeapps.live.com/op/view.aspx?src=http://bookfuns.com/1.ppt
- imx6 关闭调试串口
需要关闭imx6调试串口,用作普通的串口使用. 参考链接 http://blog.csdn.net/neiloid/article/details/7585876 http://www.cnblogs ...
- 来杯Caffe——在ubuntu下安装Caffe框架并测试
Caffe是一种深度学习框架...blablabla...... Caffe要在ubuntu下安装 1. 安装依赖 sudo apt-get install libatlas-base-dev sud ...
- 设置glassfish开启自动domain
1-在/etc/rc.local中配置开机自启动 su - sumapay25 -c "/opt/glassfish.sh start 1" 2-/opt/glassfish.sh ...