似懂非懂,能稍微解释一下吗?

小卡拉米 2019-08-15 11:15:30

double *double_p = new double[3]{1, 2, 3};
int ia[3]{11, 22, 33};
auto int_pp = ia;
auto int_p = &ia;

// double_p[0] 怎么理解?
std::cout << double_p << ", " << *double_p << ", " << double_p[0] << std::endl;

// ia 是指向数组第一个元素的指针?
std::cout << ia << ", " << *ia << ", " << ia[0] << std::endl;

// 和直接使用 ia 一样?
std::cout << int_pp << ", " << *int_pp << ", " << int_pp[0] << std::endl;

// int_p 和 *int_p 值(地址)一样,为啥还要解两次才能拿到值?
std::cout << int_p << ", " << *int_p << ", " << **int_p << ", " << *int_p[0] << std::endl;

output:

0x2fa89c70, 1, 1
0x22fc64, 11, 11
0x22fc64, 11, 11
0x22fc64, 0x22fc64, 11, 11
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
弓人水 2019-08-15
  • 打赏
  • 举报
回复
1、double_p是指向数组的指针,double_p[0]就是该数组的第一个值;
2、首先ia是一个数组(不是指针,sizeof就有区别),但是*运算与指针类似,所以*ia取到首值;
3、int_pp只是与ia指向同一个地址的指针,它们不一样,本质是两个指针;
4、int_p是首地址指向ia的一个数组指针,*取一次返回的是一个数组,再取一次才是首数组的首值。
ryder_luoluo 2019-08-15
  • 打赏
  • 举报
回复
1. double_p【0】 = *(double_p+0)
2. ia时数组,跟指针不同,记录的时数据的起始地址。
3. 指针和数组本质不同,使用一样
4. int_p 二级指针,取*得到一级指针,还是指针。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧