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

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

int *daytab[13] 首先是 daytab[13] 是一个数组,int *daytab[13] 数组的每个元素是一个 int 指针。
zhouhu
2024-03-25 20:05:59 +08:00
rrfeng
2024-03-25 20:07:45 +08:00
我看看这里谁嫌弃 go 的声明语法:

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

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

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

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

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

© 2021 V2EX