int iA[4]={1,2,3,4}; //定义了一个数组iA
然后int *pI=iA,int *pI=&iA这两种形式也就是一个直接赋值,一个加上&有什么区别?
麻烦各位大神解答,谢谢!
我觉得是这样的——
以前经常听人说,数组就是一个指针,指向数组中的第一个元素。
意思是数组名称是一个指针,也就是数组中第一个元素的地址,它的类型取决于数组中元素的类型。
拿int iA[4] = {1, 2, 3, 4}; 来说,iA是指向int类型的指针。
当数组名作为&符号的操作数时,不应该把数组名当作指针来理解,&在数组名前面,就是一个指向数组的指针。
所以&iA是指向上面那个数组的指针。
上面你写的int *pI=&iA是错的,应该用下面的写法:
int (*pI2)[4]; pI2 = &iA;
iA 和 &iA 这两种情况,输出的值是一样的,数组第一个元素的首地址和数组的首地址是一样的。
cout << iA << endl;
cout << &iA << endl;
但是——
cout << iA + 1 << endl; cout << &iA + 1 << endl;
iA指向int类型,iA + 1输出后比iA多一个int的大小,也就是4;
&iA指向数组,&iA + 1输出后比&iA多一个数组的大小,在这里是16。
& 这个符号叫取地址符.获取后面的变量指向的地址.
int *pI=iA,int *pI=&iA
那请问这两种有什么区别呀?
@下一个明天、另一个我: & 这个符号叫取地址符.获取后面的变量指向的地址.
是这样的,在C语言中,定义的一个数组,例如题主的iA[4],定义的数组名iA在复制给指针时,会将数组的首地址复制给指针pl,那么第一种 int *pl = iA;是一种隐式形式,既然iA是一个地址,那么就是讲pl指向数组的首地址,要是打印pl的话应该是数组的首地址;第二种int *pl = &iA;这种写法应该是不正确的,怎么能给一个首地址再取其地址呢!