“char(* a)”是什么意思?
这是C标准吗?
因为C中的声明遵循运算符优先级规则(即在间接之前计算数组预订),所以需要使用parens来声明指向数组类型的指针。
在许多用例中,使用普通char *
实际上没有任何实际好处,除了它是一种强制数组大小的方法,特别是当用作函数参数时:
void foo(char bar[42]);
相当于
void foo(char *bar);
并接受任何char *
,而
void foo(char (*bar)[42]);
只接受指向大小为42
数组的指针。
由于在后一种情况下访问bar
的元素很麻烦,因此在函数体中立即定义等效的char *
可能是个好主意。
char *baz = *bar;
这样你就可以使用直接订阅baz[13]
代替(*bar)[13]
。
如果您对C声明感到困惑,可以使用cdecl
程序来解释它:
~$ cdecl Type `help' or `?' for help cdecl> explain char (*a)[12]; declare a as pointer to array 12 of char
指向12个字符数组的指针。
a
是指向array of 12 characters
指针。