首页 新闻 会员 周边 捐助

有关指针的问题

0
[已解决问题] 解决于 2016-12-26 21:31

int iA[4]={1,2,3,4}; //定义了一个数组iA

 

然后int *pI=iA,int *pI=&iA这两种形式也就是一个直接赋值,一个加上&有什么区别?

麻烦各位大神解答,谢谢!

下一个明天、另一个我的主页 下一个明天、另一个我 | 菜鸟二级 | 园豆:208
提问于:2016-12-25 13:20
< >
分享
最佳答案
0

 我觉得是这样的——

以前经常听人说,数组就是一个指针,指向数组中的第一个元素。

意思是数组名称是一个指针,也就是数组中第一个元素的地址,它的类型取决于数组中元素的类型。

拿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。

奖励园豆:5
去冰三分糖 | 菜鸟二级 |园豆:380 | 2016-12-25 18:04
其他回答(2)
0

& 这个符号叫取地址符.获取后面的变量指向的地址.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-25 13:25

int *pI=iA,int *pI=&iA

那请问这两种有什么区别呀?

@下一个明天、另一个我: & 这个符号叫取地址符.获取后面的变量指向的地址.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-25 21:07
0

是这样的,在C语言中,定义的一个数组,例如题主的iA[4],定义的数组名iA在复制给指针时,会将数组的首地址复制给指针pl,那么第一种 int *pl = iA;是一种隐式形式,既然iA是一个地址,那么就是讲pl指向数组的首地址,要是打印pl的话应该是数组的首地址;第二种int *pl = &iA;这种写法应该是不正确的,怎么能给一个首地址再取其地址呢!

letcafe | 园豆:434 (菜鸟二级) | 2016-12-25 15:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册