gpt4 book ai didi

c++ - 很难理解 char (*p)[sizeof(c)]; 的优先级原则;

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:03 24 4
gpt4 key购买 nike

我正在学习指针并挑战自己,我尝试取消引用指向字符数组的指针。最终这成功了:

char (*p)[sizeof(c)];

其中 c 是一个数组 c[]="something"

我很难理解 (*p)[sizeof(c)];*p[sizeof(c)]; 的区别。 p>

根据我目前所知道的(这并不多!)计算机在 (*p)[sizeof(c)]; 的情况下是这样说的:

“p 指向 c!哦,顺便说一句,p 是一个数组,无论 sizeof(c) 最终是什么”

但这对我来说似乎很奇怪,所以我想我对添加括号时所构造的内容感到困惑。

谁能解释一下?

上下文中的完整代码:

#include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

char c[] = "something";

char (*p)[sizeof(c)]; // this works
// char *p[sizeof(c)]; // this doesn't?

p = &c;

cout << p << endl;

cout << *p << endl;
}

最佳答案

可以使用非正式称为右-左规则 的方式读取 C 中的类型。您从要声明的变量的名称开始,然后尽可能向右走,然后尽可能向左走,然后重新开始。在考虑所有内容之前,括号会阻止您。

在你的例子中:

char (*p)[sizeof(c)];
^ p... (hit ')', turn around)
^ is a pointer... (hit '(', turn around and remove '()')
^^^^^^^^^^^ to an array of `sizeof(c)`... (end of line, turn around)
^^^^ chars. nothing left, we're done!

没有括号,这就变成了:

char *p[sizeof(c)];
^^^^^^^^^^^^ p is an array of `sizeof(c)`... (end of line, turn around)
^^^^^^ pointers to char.

这确实是完全不同的。

关于c++ - 很难理解 char (*p)[sizeof(c)]; 的优先级原则;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41361814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com