
1 Rickkkkkkk 2024-03-25 19:45:28 +08:00 说点题外话, 还有别的语言如此令人迷惑吗... |
2 ffire 2024-03-25 19:47:08 +08:00 int (*foo) [13]: foo 前有星号,被括起来,所以是一个指针,指向的东西是,一个含有 13 个 int 的数组; int *bar[13]: bar 是一个数组,元素个数是 13 ,每一个元素是指向 int 的指针。 |
3 rookiemaster OP @ffire 第一个是'一个指针,指向的东西是,一个每个元素是 13 个 int 的数组;'吗? |
4 agagega 2024-03-25 19:58:43 +08:00 https://cdecl.org/ C 的声明方式令人迷惑,一是因为指针符号*在解析中的优先级其实很低,二是因为 C 的声明方式是按照某种解方程的逻辑进行的,比如 int *a[13]的意思是*a[0]的类型是 int |
5 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 指针。 |
6 zhouhu 2024-03-25 20:05:59 +08:00 |
7 rrfeng 2024-03-25 20:07:45 +08:00 我看看这里谁嫌弃 go 的声明语法: foo *[13]int bar [13]*int |
8 Nosub 2024-03-25 20:14:00 +08:00 via iPhone 过来人,给你推荐一下,你需要看一本书,日本人写的《征服 c 指针》,一切关于指针的困惑都可以解开 。 |
9 lesismal 2024-03-25 20:45:53 +08:00 有个<让你不再害怕指针>, 好好看下基本就搞定 c 的指针了 |
10 pagxir 2024-03-25 20:57:09 +08:00 via Android 第一个是数组指针,第二个指针数组。第一个 sizeof 在 64 位系统里是 8, 第二个是 8x13=104 |
11 aklllw 2024-03-25 23:00:23 +08:00 VS 的代码风格是指针符号靠左吧?在这个问题好理解一些 int* daytab[13] // int* 类型的数组,数组名是 daytab |
12 lykhero 2024-03-25 23:04:50 +08:00 去年初学的时候 这个简直是噩梦 即便是看的国外的教材和课堂 |
13 kenvix 2024-03-25 23:16:19 +08:00 把 int *bar[13]写成 int* bar [13]吧,这样可以从泛型角度理解为 Pointer<Int> bar [13] |
15 monkeyNik 2024-03-25 23:23:54 +08:00 8 楼正解,OP 这是遇到面试题了吧 [手动狗头] |
16 monkeyNik 2024-03-25 23:24:29 +08:00 写错了 10 楼正解 |
17 ZZSZZSZZS 2024-03-26 09:07:01 +08:00 via iPhone 还是用 std::array 吧 |
18 PTLin 2024-03-26 09:17:13 +08:00 这半个月 v2 上 c 语言的问题好像都是你问的吧,也算弥补了我好久都没在 v2 看到 c 语言帖子的遗憾了。 |
19 dhb233 2024-03-2 09:34:54 +08:00 每次看到这个就觉得 go 很好,反正每次都记不住,试一下就知道区别了 |
20 yolee599 2024-03-26 11:13:21 +08:00 via Android 感觉第一个这么写没意义啊,声明不像声明,取值不像取值。要么括号无效,效果等同第二个,要么编译失败。 第二个是声明一个数组,这个数组可以用来装 13 个 int 类型的指针。 |