数组的概念与指针的概念联系非常解密。其实数组的标识相当于它的第一个元素的地址,如:int a[5],数组名a指向它的第一个元素a[0]的地址。
有语句如下:
int a[5];
int * p; |
下面的赋值为合法的:
p = a;
这里指针p 和a 是等价的,它们有相同的属性,唯一的不同是我们可以给指针p赋其它的数值,而a 总是指向被定义的5个整数组中的第一个。所以,p只是一个普通的指针变量,而与之不同,a 是一个指针常量(constant pointer),数组名的确是一个指针常量。因此虽然前面的赋值表达式是合法的,但下面的不是:
a = p;
因为a 是一个数组(指针常量),常量标识不可以被赋其它数值。
由于变量的特性,以下例子中所有包含指针的表达式都是合法的:
#include <iostream> using namespace std; int main() { int a[5]; for(int n=0; n<5; n++) } |
输出:10, 20, 30, 40, 50, |
括号[]来指明我们要引用的数组元素的索引(index)。中括号[]也叫位移(offset)操作符,它相当于在指针中的地址上加上括号中的数字。
例如,下面两个表达式互相等价:
*(a+5) = 0; // pointed by (a+5) = 0
不管a 是一个指针还是一个数组名, 这两个表达式都是合法的。
来源:https://www.cnblogs.com/guozqzzu/p/3592405.html