char*[]和char(*)[]之间的区别

Ani*_*amy 2 c arrays pointers char

有什么区别

char *array[10];

char (*array)[10];

据我了解,

  • 情况1:
    • array 声明为大小为10的字符数组数组.
    • 这是因为[]优先级高于*.
  • 案例2:
    • array 声明为指向大小为10的字符数组的指针.
    • 这是因为()并且[]具有相同的优先级,并且它们从左到右进行评估.然后*评估操作员.

我的理解是否正确?即使它是正确的,我也会感到非常困惑.有人可以更清楚地解释一下这个区别吗?

Jim*_*ter 7

当试图解释C的类型时,将[...](或[...] [...]组...)与左侧的东西切换,然后从右向左阅读.从而

char *array[10] -> char *[10]array =
Run Code Online (Sandbox Code Playgroud)

" array是一个10个指向char的数组"

char (*array)[10] -> char [10](*array)
Run Code Online (Sandbox Code Playgroud)

" array是一个指向10个字符数组的指针"

所以在第一种情况下,array是10个连续的指针,每个指针指向一个char(可能是一个char,或一个字符序列,如一个字符串),而在第二种情况下,array是一个指针,指向一个一系列10个连续的字符.

你可以用函数类型做类似的事情,用左边的东西切换参数列表.例如,

char* (*f[10])(int*) -> char* (int*)(*[10]f)
Run Code Online (Sandbox Code Playgroud)

" f是一个包含指向int参数并返回指向char的指针的函数的10个指针数组."