A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张立鹏 中级黑马   /  2016-4-14 22:15  /  1977 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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 的区别是什么?

12 个回复

倒序浏览
p和p1赋值号左边没什么区别,区别在右边,arr和&arr,都是指arr数组的首地址,但用法不同,arr+1代表的是下一个元素的地址,&arr+1代表是下一个数组的首地址,意义不同
回复 使用道具 举报
真的不是 arr 和 &arr  的区别吗..
回复 使用道具 举报
冷傲阳 发表于 2016-4-14 23:12
p和p1赋值号左边没什么区别,区别在右边,arr和&arr,都是指arr数组的首地址,但用法不同,arr+1代表的是 ...

能具体说下 &arr+1 的意义吗?假设arr[][]是个二维数组~谢谢啦!
回复 使用道具 举报
arr是数组名,本身就是一个地址,还用取地址,这样对吗?
回复 使用道具 举报
烛风小糊涂 发表于 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 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 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:26
9#
p是数组指针,p1是指针数组,说存储的全部是指针
回复 使用道具 举报
谢谢楼上解答,学习了
回复 使用道具 举报
是一个指针指向的地址
回复 使用道具 举报
前来学习
回复 使用道具 举报
进来看看,加油加油。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马