一、一维数组
要谈多维数组,首先先了解下一维数组的指针应用。
int arr[10];
通过上述代码,我们定义了一个长度为10的整形数组。
int为数组的基类型,他确定了每个数组元素所占用的空间。在visual studio编译器中int占4个字节。所以arr数组总共占据了40个字节的空间。在数组定义时,数组所需要的空间就已经分配出来了。
arr是数组名。除了用来代表这个数组,他还对应着该数组第一个元素的地址,即arr[0]的地址。也就是说arr == &arr[0]
的结果是true
。arr还有一些细节方面的东西值得我们注意一下。虽然arr可以用作算术运算,但是arr是一个常数,也就是说你无法改变arr的值,即arr++
或arr--
之类的操作都是无效的(简单的说,arr也是一个指针变量,它的特殊之处在于它存储的地址是无法改变的)。若要完成++
类似的操作,就需要用一个指针变量,arr的值赋值给指针变量,即指针变量指向数组的第一个元素。
既然指针是一个变量,那么他的值就可以通过算术运算进行改变。
int *pos;
pos = arr;
通过上述代码,我们定义了一个指向整型数据的指针变量。并且该指针变量内存储的地址恰好是数组的首地址。通过pos + 1
我们可以获得数组第二个元素的地址,也就是下标为1的数组元素的地址。pos + 1
不是地址加一,而是要看指针变量的基类型,这里的是in