C语言中指针与数组这两个概念之间的联系是如此密不可分,以至于如果不能理解一个概念,就无法彻底理解另一个概念. 而且,C语言对这些概念的处理,在某些方面与其他不为人熟知的程序语言都有所不同.
C语言中只有一位数组,而且数组的大小必须在编译器就作为一个常数确定(C99标准允许变长数组,GCC编译器实现了变长数组).然而数组的元素是任何类型的对象,所以可以造出多维数组.
关于数组,我们只能做两件事:1,确定数组的大小 2,获得该数组下标为0的元素的指针.而其他的有关数组的操作,看似是下标运算,实际上都是通过指针运算进行的.
考虑一下这样一个例子:
1 | int arr[30][30]; |
这是用指针的方式对一个元素为数组的数组进行赋值并输出;
arr是这个数组的第一个元素的首地址,通过arr的加法运算来遍历数组 然后通过一个指向元素首地址的指针p对每个元素进行遍历
有一点需要注意:除了作为sizeof的参数,其他所有情形中数组名都是代表指向数组中下标为0的元素的指针