分类: C/C++
2015-05-21 17:03:58
*:在指针定义时是说明符或者修饰符,用来说明它后面的标识符是指针。引用时用于各种指针名的左边,表示回去该指针所指向的变量或对象的值(求值)。
&:作用于变量名、数组元素名、成员名和对象名的左边,表示所指向的变量或对象的值。
声明:虽然数组名不是指针,但是用的很像指针,我们暂且把它叫做一个指针吧。
int a[10]; a ,&a和&a[0] 都是分别是什么?先说明a ,&a和&a[0]三个值是的相等:
a叫做数组名,是数组首元素的地址,也就是&a[0]的值。像是一个指针类型,是一个int型的指针类型,int *,先理解成指针吧。
&a这才是一个真正的指针,是一个数组指针。是数组的地址。
切记:&a不是指向指针的指针,因为&a和a的值相等,但是*&a和*a的值也相等,这是因为&a其实就是数组的首地址。这里的数组指针&a取值之后,变成了a,是a,不是*a,变成了这个数组的数组名,或者说是数组首元素的地址,所以两者是相等的。
看下程序:
点击(此处)折叠或打开
点击(此处)折叠或打开
数组首地址和指针相似,但是不同。定义指针并且给指针赋值后,除了指针所指向的内存空间外,指针的存放也需要空间,所以定义并初始化指针后,牵扯到两个地址空间,如下图;而数组不同,定义了一个数组,空间当即分配,操作数组永远只是在这一个空间中,所以不管对数组首地址怎样取地址,还是本身(上面)。