V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rookiemaster
V2EX  ›  C

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

  •  
  •   rookiemaster · 33 天前 · 1413 次点击
    这是一个创建于 33 天前的主题,其中的信息可能已经有所发展或是发生改变。
    20 条回复    2024-03-26 11:13:21 +08:00
    Rickkkkkkk
        1
    Rickkkkkkk  
       33 天前   ❤️ 1
    说点题外话, 还有别的语言如此令人迷惑吗...
    ffire
        2
    ffire  
       33 天前   ❤️ 1
    int (*foo) [13]: foo 前有星号,被括起来,所以是一个指针,指向的东西是,一个含有 13 个 int 的数组;
    int *bar[13]: bar 是一个数组,元素个数是 13 ,每一个元素是指向 int 的指针。
    rookiemaster
        3
    rookiemaster  
    OP
       33 天前
    @ffire 第一个是'一个指针,指向的东西是,一个每个元素是 13 个 int 的数组;'吗?
    agagega
        4
    agagega  
       33 天前
    https://cdecl.org/
    C 的声明方式令人迷惑,一是因为指针符号*在解析中的优先级其实很低,二是因为 C 的声明方式是按照某种解方程的逻辑进行的,比如 int *a[13]的意思是*a[0]的类型是 int
    zhouhu
        5
    zhouhu  
       33 天前   ❤️ 1
    int (*daytab) [13] 首先是 (*daytab) 是一个指针,(*daytab) [13] 指向的是一个数组,int (*daytab) [13] 数组的每个元素是 int 类型。

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

    foo *[13]int
    bar [13]*int
    Nosub
        8
    Nosub  
       33 天前 via iPhone   ❤️ 1
    过来人,给你推荐一下,你需要看一本书,日本人写的《征服 c 指针》,一切关于指针的困惑都可以解开 。
    lesismal
        9
    lesismal  
       33 天前   ❤️ 1
    有个<让你不再害怕指针>, 好好看下基本就搞定 c 的指针了
    pagxir
        10
    pagxir  
       33 天前 via Android
    第一个是数组指针,第二个指针数组。第一个 sizeof 在 64 位系统里是 8, 第二个是 8x13=104
    aklllw
        11
    aklllw  
       33 天前
    VS 的代码风格是指针符号靠左吧?在这个问题好理解一些
    int* daytab[13] // int* 类型的数组,数组名是 daytab
    lykhero
        12
    lykhero  
       33 天前
    去年初学的时候 这个简直是噩梦 即便是看的国外的教材和课堂
    kenvix
        13
    kenvix  
       33 天前
    把 int *bar[13]写成 int* bar [13]吧,这样可以从泛型角度理解为 Pointer<Int> bar [13]
    kenvix
        14
    kenvix  
       33 天前
    @kenvix #13 草,怎么把尖括号给吞了:Pointer\<Int\> bar [13]
    monkeyNik
        15
    monkeyNik  
       33 天前
    8 楼正解,OP 这是遇到面试题了吧 [手动狗头]
    monkeyNik
        16
    monkeyNik  
       33 天前
    写错了 10 楼正解
    ZZSZZSZZS
        17
    ZZSZZSZZS  
       32 天前 via iPhone
    还是用 std::array 吧
    PTLin
        18
    PTLin  
       32 天前   ❤️ 1
    这半个月 v2 上 c 语言的问题好像都是你问的吧,也算弥补了我好久都没在 v2 看到 c 语言帖子的遗憾了。
    dhb233
        19
    dhb233  
       32 天前
    每次看到这个就觉得 go 很好,反正每次都记不住,试一下就知道区别了
    yolee599
        20
    yolee599  
       32 天前 via Android
    感觉第一个这么写没意义啊,声明不像声明,取值不像取值。要么括号无效,效果等同第二个,要么编译失败。
    第二个是声明一个数组,这个数组可以用来装 13 个 int 类型的指针。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2520 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:01 · PVG 00:01 · LAX 09:01 · JFK 12:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.