Nee*_*der 3 c arrays pointers declaration implicit-conversion
我对这两个符号表示什么感到非常困惑。我知道 的优先级()大于[],这是否意味着它char(*name)[10]是一个指针并且char *name[10]是一个数组?
本声明
char *name[10];
Run Code Online (Sandbox Code Playgroud)
声明类型为 10 个元素的数组char *。
例如,这样的数组可以通过以下方式初始化
char *name[10] = { "Peter", "Tom", "Michael" };
Run Code Online (Sandbox Code Playgroud)
数组中没有相应初始化器的所有元素都将由 隐式初始化NULL。那就是上面的声明等价于
char *name[10] =
{
"Peter", "Tom", "Michael", NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
Run Code Online (Sandbox Code Playgroud)
指向数组第一个元素的指针看起来像
char **p = name;
Run Code Online (Sandbox Code Playgroud)
指向整个数组的指针看起来像
char * ( *p )[10] = &name;
Run Code Online (Sandbox Code Playgroud)
本声明
char (*name)[10];
Run Code Online (Sandbox Code Playgroud)
声明一个指向数组类型对象的指针char[10]。
例如,如果你有一个数组声明如下
char name_list[][10] =
{
"Peter", "Tom", "Michael"
};
Run Code Online (Sandbox Code Playgroud)
然后你可以声明一个指向数组第一个元素的指针,如
char (*name)[10] = name_list;
Run Code Online (Sandbox Code Playgroud)
指向整个数组的指针可以声明为
char ( *p )[3][10] = &name_list;
Run Code Online (Sandbox Code Playgroud)
这是一个演示程序。
#include <stdio.h>
int main(void)
{
{
char *name[10] = { "Peter", "Tom", "Michael" };
char **p1 = name;
puts( *p1 );
char * ( *p2 )[10] = &name;
puts( ( *p2 )[0] );
// or
puts( **p2 );
}
putchar( '\n' );
{
char name_list[][10] =
{
"Peter", "Tom", "Michael"
};
char ( *p1 )[10] = name_list;
puts( *p1 );
char ( *p2 )[3][10] = &name_list;
puts( ( *p2 )[0] );
// or
puts( **p2 );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序输出是
Peter
Peter
Peter
Peter
Peter
Peter
Run Code Online (Sandbox Code Playgroud)