在SO上有很多关于C(和C++子集)中指针和数组声明细节的问题。
然而,我更感兴趣的是为什么。
当我们连续声明几个指针/数组时,为什么每个变量前都要放置*
、[]
?
int *a, *b;
int c[1], d[1];
为什么在函数指针中变量名后/周围要输入内容?
void (*foo_ptr)(int, int);
为什么即使编译器将这些东西作为类型的一部分进行识别和报告,我们还会有这种让很多新手感到困惑的功能呢?例如:
function foo接受int **,但给出了int *
我猜我正在寻找它被创建的原因的直觉,以便我可以将其应用于对语言的理解上。现在我只是看不到它...
void*(int, int)
和void(int, int)*
得到了解决。 - Noone AtAllint X,Y,Z;
将X
,Y
和Z
声明为int
,而且每个X
、Y
和Z
都是某个表达式的“图片”,例如b
、*b
、b[10]
、*b[10]
等等。声明的标识符的实际类型源自于这个“图片”: 由于*b[10]
是一个int
,那么b[10]
就是指向int
的指针,所以b
是一个包含 10 个指向int
的指针的数组。 - Eric Postpischilint X = 0, Y = 0
中,X
是“图像”a
,而Y
是“图像” “*b”。 - Eric PostpischilX
部分是图片;= initial value
是单独的,它指定了被声明的东西的初始值,而不是所示表达式的初始值。 - Eric Postpischil