c++ - 为什么 *ptr 在 printf 中?
问题描述
在下面的代码中,(*ptr)[1]
不应该(ptr)[1]
改为吗?Asptr
也是一个指针a
。a[][]
int a[][3] = {1, 2, 3, 4, 5, 6};
int (*ptr)[3] = a;
printf("%d", (*ptr)[1]);
解决方案
不。
a
是一个数组数组。ptr
是指向该数组数组的 [第一个元素] 的指针。*ptr
是该数组的第一个元素(它本身就是一个数组!)。- 这也可以写成
ptr[0]
(因为*(a+n)
isa[n]
)。
- 这也可以写成
(*ptr)[1]
是该结果中的第一个元素。这个也可以写
ptr[0][1]
。它会更清楚地写成
a[0][1]
。
您提出的反例ptr[1]
是结果中的下一个元素,仍然是一个数组。
该声明也很狡猾。初始化程序在技术上是有效的,但并没有按照你的想法做,因为它似乎只列出了一个维度。
总的来说,这不是很好的代码。
推荐阅读
- three.js - GSAP+三个js
- c# - C# 异常用户未处理
- postgresql - PostgresDB:视图不显示内容,但视图的查询显示数据
- java - MQ 客户端应用程序连接到客户端
- angular - MatTable 不刷新更新
- python-3.x - 删除 DataFrame 行:groupby.apply 的更快替代方案
- python-3.x - 为什么建议在虚拟环境中安装openpyxl?
- linux - 在 ubuntu 中将颤振添加到我的 PATH 的问题
- javascript - 将文件作为具有不同输出的子服务执行
- javascript - 如何在 Javascript 中更改 HTML 输入元素的焦点