黑马程序员技术交流社区

标题: 关于数组指针的一些小问题 [打印本页]

作者: 张立鹏    时间: 2016-4-14 22:15
标题: 关于数组指针的一些小问题
  1. int main(int argc, const char * argv[]) {
  2.     int arr[3] = {1,2,3};
  3.     int *p = arr;
  4.     int (*p1) = &arr;
  5.     return 0;
  6. }
复制代码
这里的 p 和 p1 的区别是什么?

作者: 冷傲阳    时间: 2016-4-14 23:12
p和p1赋值号左边没什么区别,区别在右边,arr和&arr,都是指arr数组的首地址,但用法不同,arr+1代表的是下一个元素的地址,&arr+1代表是下一个数组的首地址,意义不同
作者: ySssssssss    时间: 2016-4-14 23:19
真的不是 arr 和 &arr  的区别吗..
作者: 烛风小糊涂    时间: 2016-4-15 01:18
冷傲阳 发表于 2016-4-14 23:12
p和p1赋值号左边没什么区别,区别在右边,arr和&arr,都是指arr数组的首地址,但用法不同,arr+1代表的是 ...

能具体说下 &arr+1 的意义吗?假设arr[][]是个二维数组~谢谢啦!
作者: 堕落天使    时间: 2016-4-15 08:37
arr是数组名,本身就是一个地址,还用取地址,这样对吗?
作者: 冷傲阳    时间: 2016-4-15 08:41
烛风小糊涂 发表于 2016-4-15 01:18
能具体说下 &arr+1 的意义吗?假设arr[][]是个二维数组~谢谢啦!

&arr其实就是把这个数组看成一个整体,
例如一维数组:int arr[5]
那么&arr 看正数组这一整块变量的地址,&arr+1则跳过这快数组,指向下一个数组的首地址,也就相当于(arr+4)+1,arr+4正好是第五个元素的地址,再+1就是下个数组的首地址

例如二维数组:int arr [5][5];
&arr+1,就代表跳过这个二维数组,指向下个数组的首地址
也就是&arr[4][4]+sizeof( int );

作者: 冷傲阳    时间: 2016-4-15 08:43
烛风小糊涂 发表于 2016-4-15 01:18
能具体说下 &arr+1 的意义吗?假设arr[][]是个二维数组~谢谢啦!

&arr其实就是把这个数组看成一个整体,
例如一维数组:int arr[5]
那么&arr 看正数组这一整块变量的地址,&arr+1则跳过这快数组,指向下一个数组的首地址,也就相当于(arr+4)+1,arr+4正好是第五个元素的地址,再+1就是下个数组的首地址
例如二维数组:int arr [5][5];
&arr+1,就代表跳过这个二维数组,指向下个数组的首地址
也就是&arr[4][4]+sizeof( int );

作者: 冷傲阳    时间: 2016-4-15 08:44
烛风小糊涂 发表于 2016-4-15 01:18
能具体说下 &arr+1 的意义吗?假设arr[][]是个二维数组~谢谢啦!

1.&arr其实就是把这个数组看成一个整体,
例如一维数组:int arr[5]
那么&arr 看正数组这一整块变量的地址,&arr+1则跳过这快数组,指向下一个数组的首地址,也就相当于(arr+4)+1,arr+4正好是第五个元素的地址,再+1就是下个数组的首地址
2.例如二维数组:int arr [5][5];
&arr+1,就代表跳过这个二维数组,指向下个数组的首地址
也就是&arr[4][4]+sizeof( int );
作者: Open    时间: 2016-4-15 13:36
p是数组指针,p1是指针数组,说存储的全部是指针
作者: Latinno    时间: 2016-4-15 16:25
谢谢楼上解答,学习了
作者: 心若不动    时间: 2016-4-15 22:08
是一个指针指向的地址
作者: 缘之有缘    时间: 2016-4-15 22:33
前来学习
作者: AllenTse    时间: 2016-4-25 10:18
进来看看,加油加油。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2