您的位置:首页 > 编程语言 > C语言/C++

C语法_指针

2015-10-27 10:40 218 查看
一:指针变量

1:定义指针变量的一搬形式 基类型 * 指针变量名

注意:定义指针变量时必须指定基类型。因为不同的类型的数据在内存中所占的字节数是 不同的。比如 int占2个字节,而char占1个字节。所以在指针移动一个位置,在int 型中意味着移动2个字节,在char型中意味着移动1个字节。

二:数组元素的指针

1:数组名代表数组中首元素的地址。

2:如果指针变量P的初值为&a[0],则p+i和a+i就是数组元素a[i]的地址。

(p+i)或(a+i)是p+i和a+i所指向的数据元素,即a[i]。

a[i] = (a+i)=(p+i)无条件等价

3:注意数组名a代表数组首元素的地址,它是一个指针常量,所以它的值在程序运行过程期间 是固定不变的,所以a++等运算无法实现。

4:二维数组a[i][j]

a:二位数组a[i][j]中,a[i]是每行的首地址。所以a+i代表a[i]的首地址,即第i行的首地 址。

b:a[0]+1代表第一行第一列a[0][1]的地址,a[0]+1=*(a+0)+1。

所以a[0][1]的值就为:(a[0]+1)=((a+0)+1)=(*a+1)。

所以a[i][j]的值就为:(a[i]+j)=(*(a+i)+j)

5:区别 :int (p)[4]表示p是一个指针变量,它指向包含4个整型元素的一维数组。括号不能 省略,表示p先与结合,是指针变量。

int p[4] 表示指针数组。数组中的每一个元素存放一个地址。由于[]的优先级比 高,因此p先与[4]结合,形成p[4],然后再与结合,表示此数组是指针类型的, 每个数组元素都是指针变量。

三:函数指针

如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段空间的起始地址就是函数指针。

1:用函数指针变量调用函数

定义形式为 : 数据类型(*指针变量名)(函数参数列表)

数据类型为函数返回值的类型

例如:int (*p)(int,int);

p=max;

c=(*p)(a,b) ;此处用指针调用max函数,等价于c=max(a,b)

区别:int *p(int,int);声明了一个p函数,这个函数的返回值是指向整型的指针变量。

所以数据类型后的圆括号很重要。

2:用指向函数的指针做函数参数。

这样的作用就是,每次调用fun函数时,要调用的函数不是固定的。

四:返回指针的函数

定义形式: 类型名 *函数名(参数列表)

例如:int *a(int x, int y)

即调用a函数后,其返回值是一个指向整型的指针变量

五:指针数组和多重指针

1:指针数组

定义形式 : 类型名 *数组名[数组长度]

例如:int p[4] 表示指针数组。数组中的每一个元素存放一个地址。由于[]的优先级比 高,因此p先与[4]结合,形成p[4],然后再与结合,表示此数组是指针类型的, 每个数组元素都是指针变量。

指针数组比较适合用来指向若干个字符串,使字符串的处理更加方便。

2:指向指针数据的指针

定义形式: 类型名 * *指针变量

例如: char * *p

运算符的结合性是从右到左,显然*p是指针变量的定义形式。在它前面又有一个, 表示指针变量p是指向一个字符指针变量。*p就是p所指向的另一个指针变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 指针