初识指针
- 指针就是一个值为内存地址的变量(或数据对象)。
-
数组名是数组首元素的地址。也就是说,如果a是一个数组,那么下面的语句成立:a==a[0];
a和a[0]都表示数组首元素的内存地址。
3.在C中,指针加1指的是增加一个存储单元。对于指针而言,这意味着加1后的地址是下一个元素的地址,而不是下一个字节的地址。
4.在指针面前使用*运算符可以得到该指针所指向对象的值。
5.指针加1,指针的值递增它所指向类型的大小(以字节为单位)。
6.在数组中,a[i]与*(a+i)相同。
int *a形式和int a[]形式都表示a是一个指向int的指针。但int a[]只能用于声明形式参数。
下面四种函数原型是相同的:
int sun(int *a);
int sun(int *);
int sun(int a[ ]);
int sun(int [ ]);
7.地址应该和指针类型兼容。如不能把double类型的地址赋给int的指针,至少要避免不明智的类型转换。
8.计算两个指针的差值。求差的两个指针分别指向同一个数组的不同元素,通过计算求出两元素之间的距离。差值的单位与数组类型的单位相同。
注意:可以利用关系运算符比较两个指针的值,但前提是两个指针都指向相同类型的对象。
如两个int类型的指针相减的值为2,则两个指针所指的两个元素相隔两个int。
9.指针和多维数组。如果a是一个int类型的二维数组,则
a --二维数组首元素的地址(每个元素都是内含两个int类型元素的一维数组)
a+2 --二维数组的第三个元素(即一维数组)的地址
*(a+2) --二维数组第三个元素的首元素(一个int类型的值)地址