在32位PC机中,一个指针占4个字节(由32位地址总线决定)。
一个变量的值就是它所存储的数值,即使指针也不例外,所以无论一个指针所指的变量a的内容改变成什么,
指针本身的值(存储变量a的地址)都不会改变。因而说C中所有参数都是按值传递,这与函数中指针形参所指
的变量被改变并不矛盾,因为指针形参始终没有变化,即在函数中改变指针形参(移动指针),指针所存储的地
址实际上仍然没有被改变。
数组名是一个指针常量,它的类型是指向其元素类型的指针,切记,二维数组的元素类型是一维数组,所以二维数
组的数组名相当于一个指向一维数组的指针。
所以:
对于一维数组:void fun( int *p) 形式上等同于 void fun( int a[ ])
对于二维数组:void fun( int(*q)[3] ) 形式上等同于 void fun( int q[ ][3] ) , 但注意千万不能写成 void fun( int **q ) !
因为此时q表示指向整型指针的指针。
而int (*p)[10]; 首先()表明p是一个指针,[ ]表明它是一个指向一维整型数组的指针。
int a[2][2]; a并不是一个指向整型的指针,而也是一个指向整型数组的指针。
字符串常量的直接值是一个地址,所以当一个字符串常量出现在一个表达式中,它所使用的值就是这些字符存储的
地址。可以把字符串常量赋给一个指向字符的指针,但不能赋给数组。
阅读(2180) | 评论(0) | 转发(1) |