Arrays char*name[10]和char(*name)[10]之间有什么区别?
我对这两种符号的含义感到非常困惑。Arrays char*name[10]和char(*name)[10]之间有什么区别?,arrays,c,pointers,declaration,implicit-conversion,Arrays,C,Pointers,Declaration,Implicit Conversion,我对这两种符号的含义感到非常困惑。 我知道()的优先级大于[],这是否意味着char(*name)[10]是指针,而char*name[10]是数组?int*a[10]声明了一个包含10个指向整数指针的数组 int(*a)[10]-声明一个指向10个整数数组的指针。此声明 char *name[10]; char (*name)[10]; 声明类型为char*的10个元素的数组 例如,这样的数组可以通过以下方式初始化 char *name[10] = { "Peter",
我知道
()
的优先级大于[]
,这是否意味着char(*name)[10]
是指针,而char*name[10]
是数组?int*a[10]
声明了一个包含10个指向整数指针的数组
int(*a)[10]
-声明一个指向10个整数数组的指针。此声明
char *name[10];
char (*name)[10];
声明类型为char*
的10个元素的数组
例如,这样的数组可以通过以下方式初始化
char *name[10] = { "Peter", "Tom", "Michael" };
数组中没有相应初始值设定项的所有元素都将由NULL
隐式初始化。即上述声明等同于
char *name[10] =
{
"Peter", "Tom", "Michael", NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
指向数组第一个元素的指针如下所示
char **p = name;
char * ( *p )[10] = &name;
指向整个数组的指针如下所示
char **p = name;
char * ( *p )[10] = &name;
本声明
char *name[10];
char (*name)[10];
声明指向数组类型为char[10]
的对象的指针
例如,如果有一个数组声明为
char name_list[][10] =
{
"Peter", "Tom", "Michael"
};
char ( *p )[3][10] = &name_list;
然后可以声明指向数组第一个元素的指针,如
char (*name)[10] = name_list;
指向整个数组的指针可以声明为
char name_list[][10] =
{
"Peter", "Tom", "Michael"
};
char ( *p )[3][10] = &name_list;
这是一个演示程序
#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;
}
*姓名[10]
是由10个指针组成的数组。它们通常用于处理二维阵列
(*姓名)[10]
另一方面,它基本上是一个指向10个整数数组的指针。是的,带有
char(*name)[10]
name是指向10个字符数组的指针(name=malloc(1000*sizeof*name);strcpy(name[123],“foobar”);
);使用char*name[10]
name是一个由10个指向char的指针组成的数组(name[4]=malloc(42);
)。哦,我认为char*name[10]是指向数组“name”的第一个元素的指针,即name[0]。sizeof(char(*)[10])
比sizeof(char 10])小10倍。@NeerajKumar认为char name[10]是指针”-->数组不是指针。指针不是数组。正如您第一次查询的那样:“char*name[10]是一个数组”。哦,我认为char*name[10]是指向数组“name”的第一个元素的指针,即name[0]。感谢您澄清我的疑问。请注意字符串文本是const
<代码>常量字符*名称[10]={“彼得”、“汤姆”、“迈克尔”}会更正确。@124312341234123411234123在C中,字符串文字不是常量,即使代码不应该尝试更改它们。@12431234123412341234123在C中字符串文字具有非常量字符数组的类型,尽管您不能更改字符串文字。