gpt4 book ai didi

arrays - char *name[10] 和 char (*name)[10] 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 23:11:28 25 4
gpt4 key购买 nike

我对这两个符号表示什么感到非常困惑。
我知道()的优先级大于 [] ,这是否意味着 char(*name)[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 (*name)[10];
声明一个指向数组类型对象的指针 char[10] .
例如,如果您有一个数组声明为
char name_list[][10] =
{
"Peter", "Tom", "Michael"
};
然后你可以声明一个指向数组第一个元素的指针,如
char (*name)[10] = name_list;
指向整个数组的指针可以声明为
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;
}
程序输出是
Peter
Peter
Peter

Peter
Peter
Peter

关于arrays - char *name[10] 和 char (*name)[10] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65304270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com