有人能完整地解释一下 int (*daytab) [13]和 int *daytab[13]吗

246 天前
 rookiemaster
2234 次点击
所在节点    C
20 条回复
Rickkkkkkk
246 天前
说点题外话, 还有别的语言如此令人迷惑吗...
ffire
246 天前
int (*foo) [13]: foo 前有星号,被括起来,所以是一个指针,指向的东西是,一个含有 13 个 int 的数组;
int *bar[13]: bar 是一个数组,元素个数是 13 ,每一个元素是指向 int 的指针。
rookiemaster
246 天前
@ffire 第一个是'一个指针,指向的东西是,一个每个元素是 13 个 int 的数组;'吗?
agagega
246 天前
https://cdecl.org/
C 的声明方式令人迷惑,一是因为指针符号*在解析中的优先级其实很低,二是因为 C 的声明方式是按照某种解方程的逻辑进行的,比如 int *a[13]的意思是*a[0]的类型是 int
zhouhu
246 天前
int (*daytab) [13] 首先是 (*daytab) 是一个指针,(*daytab) [13] 指向的是一个数组,int (*daytab) [13] 数组的每个元素是 int 类型。

int *daytab[13] 首先是 daytab[13] 是一个数组,int *daytab[13] 数组的每个元素是一个 int 指针。
zhouhu
246 天前
rrfeng
246 天前
我看看这里谁嫌弃 go 的声明语法:

foo *[13]int
bar [13]*int
Nosub
246 天前
过来人,给你推荐一下,你需要看一本书,日本人写的《征服 c 指针》,一切关于指针的困惑都可以解开 。
lesismal
246 天前
有个<让你不再害怕指针>, 好好看下基本就搞定 c 的指针了
pagxir
246 天前
第一个是数组指针,第二个指针数组。第一个 sizeof 在 64 位系统里是 8, 第二个是 8x13=104
aklllw
246 天前
VS 的代码风格是指针符号靠左吧?在这个问题好理解一些
int* daytab[13] // int* 类型的数组,数组名是 daytab
lykhero
246 天前
去年初学的时候 这个简直是噩梦 即便是看的国外的教材和课堂
kenvix
246 天前
把 int *bar[13]写成 int* bar [13]吧,这样可以从泛型角度理解为 Pointer<Int> bar [13]
kenvix
246 天前
@kenvix #13 草,怎么把尖括号给吞了:Pointer\<Int\> bar [13]
monkeyNik
246 天前
8 楼正解,OP 这是遇到面试题了吧 [手动狗头]
monkeyNik
246 天前
写错了 10 楼正解
ZZSZZSZZS
245 天前
还是用 std::array 吧
PTLin
245 天前
这半个月 v2 上 c 语言的问题好像都是你问的吧,也算弥补了我好久都没在 v2 看到 c 语言帖子的遗憾了。
dhb233
245 天前
每次看到这个就觉得 go 很好,反正每次都记不住,试一下就知道区别了
yolee599
245 天前
感觉第一个这么写没意义啊,声明不像声明,取值不像取值。要么括号无效,效果等同第二个,要么编译失败。
第二个是声明一个数组,这个数组可以用来装 13 个 int 类型的指针。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1026918

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX