gpt4 book ai didi

c - C 中的指针语法 : why does * only apply to the first variable?

转载 作者:太空狗 更新时间:2023-10-29 16:25:28 25 4
gpt4 key购买 nike

C 中的以下声明:

int* a, b;

会将a声明为int*类型,将b声明为int类型。我很清楚这个陷阱,但我想知道的是为什么它会这样运作。为什么它不像大多数人直觉上期望的那样也将 b 声明为 int*?换句话说,为什么 * 应用于变量名,而不是类型?

当然,您可以这样写,以便与它实际的工作方式更加一致:

int *a, b;

但是,我和我交谈过的每个人都认为 a 是“指向 int 的指针” 类型,而不是 a 是指向某些数据的指针和该数据是“int”

这仅仅是 C 语言设计者的一个错误决定,还是有一些充分的理由说明它以这种方式进行解析?我确定之前已经回答了这个问题,但我似乎无法使用搜索找到它。

最佳答案

C 声明以这种方式编写,以便“声明镜像使用”。这就是为什么要这样声明数组:

int a[10];

你是否要改用你提出的规则,它总是存在的地方

type identifier, identifier, identifier, ... ;

...那么逻辑上数组必须这样声明:

int[10] a;

很好,但不会反射(reflect)您使用 a 的方式。请注意,这也适用于函数——我们这样声明函数:

void foo(int a, char *b);

而不是

void(int a, char* b) foo;

一般来说,“声明镜像使用”规则意味着你只需要记住一组关联性规则,它适用于 *[] 等操作符和 () 当您使用该值时,以及声明符中的相应标记,如 *[]().


经过进一步思考,我认为还值得指出的是,将“pointer to int”拼写为“int*”只是“声明镜像使用”的结果“反正。如果您要使用另一种声明方式,将“指向 int 的指针”拼写为“&int”或完全不同的东西(如“@int”。

关于c - C 中的指针语法 : why does * only apply to the first variable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3260784/

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