gpt4 book ai didi

c - char *(arr[5]) 和 char (*arr)[5] 之间的区别

转载 作者:行者123 更新时间:2023-11-30 16:51:43 25 4
gpt4 key购买 nike

看来我实际上不知道两者之间的区别 char *(arr[5])char (*arr)[5]从逻辑上讲,就像类型定义一样,char *(arr[5])是一个指向 5 char 的数组的指针的,char *arr[5]char 的数组指针然后是什么(*arr)[5]会是那时吗?或者没有什么区别?

<小时/>

我做了一些测试,发现这3个声明是不同的。例如,如果我使用 char (*arr)[5]它完全允许我这样做arr = malloc(2) ,否则它会提示非法转换。

<小时/>

有人可以解释一下这些声明之间的差异,当它们被使用时,如果这也包括我可以做arr = malloc(2),那将是一个巨大的优势。动态分配 [5] 字符数组,因为它允许我在语义上使用 char (*arr)[5] 来这样做虽然在使用时给我堆栈溢出。 (免责声明:[]建议堆栈分配,因此它没有多大意义,因为据我所知,堆内存地址不能指向堆栈内存地址)

最佳答案

char *(arr[5]) 等于 char *arr[5] 这意味着你有一个指针数组,每个指针都指向一个字符,所以arr[0] 可以指向一个字符,arr[1] 可以指向一个字符等等。例如,您可以这样编写代码:

char *(arr[5]);// or char *arr[5]
char a = 'a',b='b',c='c';
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
printf("a=%c b=%c c=%c \n",*arr[0],*arr[1],*arr[2]);

但是 (*arr)[5] 表示您有一个包含 5 个字符的数组,并且您想要指向它。
例如,您可以这样编写代码:

char (*arr)[5];
char str[5] = "Hell";
arr = &str;
printf("%s\n",*arr);

关于c - char *(arr[5]) 和 char (*arr)[5] 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41647323/

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