“char(* a)[12]”是什么意思?

时间:2010-06-10 05:59:35

标签: c standards

这是C标准吗?

4 个答案:

答案 0 :(得分:15)

如果您对C声明感到困惑,可以使用cdecl程序来解释它:

~$ cdecl
Type `help' or `?' for help
cdecl> explain char (*a)[12];
declare a as pointer to array 12 of char

答案 1 :(得分:3)

指向12个字符数组的指针。

答案 2 :(得分:3)

因为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]

答案 3 :(得分:1)

a是一个指向array of 12 characters的指针。