数组名可以当作指针来用的。 结论:
数组名可以当作指针(指针常量)来用; 数组名当指针用时,数组名可以看作是指向数组第一个元素的指针常量 如: 已经 a 是一个数组名(任何类型的数组,任何维度的数组,都可以), a当指针用时, &a[0]
数组名既可以代表整个数组,又可以当作指针用, 那它什么时候代表整个数组,什么时候当指针用呢? 假设a是数组或 (1) 在如下情况下,a代表整个数组 sizeof(a) 求数组a的所占的字节数,此时a代表整个数组 typeof(a) 求a的类型时,此时a代表整个数组 &a a的地址,此时a代表整个数组,整个数组的地址 (2) 其他情况下,当指针用 p = a; //a当指针用, why? 不能把整个数组赋值给其他对象。 // a当作指针 p = a ; => p = &a[0];
a + 1 ; //a当作指针用,why? 整个数组不能整体 +1 a + 1 => &a[0] + 1 => &a[1] ...
例子:
int a[10]; a + 1 //在这个表达式中,数组名 a当作指针用 // a + 1 => &a[0] + 1 => &a[1] a + i // a + i => &a[0] + i => &a[i] ... *(a+i) => *(&a[0] +i) => *&a[i] => a[i]
结论: *(p + i) <=> p[i], when i >= 0