C 编程 - 字符数组与字符串数组寻址消歧

标签 c arrays pointers char c-strings

char contents[8][2]={"1","2","3","4","5","6","7","8"};
char* contentsx[8]={"1","2","3","4","5","6","7","8"};

printf("Contents: %s\n", contents[1]);
printf("Contents: %s\n", &contents[1]);
printf("Contentsx: %s\n", contentsx[1]);
printf("Contentsx: %s\n", &contentsx[1]);

打印:

Contents: 2
Contents: 2 
Contentsx:2 
Contentsx: //prints nothing or some garbage character

问题是,为什么contents[1]是元素1的值, 与 &contents[1] 打印相同的结果,即元素 1 的地址 在这种情况下,为什么 contentsx[1] 的值不同于 &contentsx[1](有一些未定义的行为)

最佳答案

这是因为 contents 是一个数组的数组。

contents[1] 表示此数组中的第二个数组。因此,它的名称衰减为指向其第一个元素的指针,其大小为 1。然而,&contents[1] 指向整个数组,大小为 2。

xcontents[1] 是一个 char *,指向给定字符串的确切位置。 &xcontents[1] 是一个指向条目的 char **,在本例中是一个 char *

关于C 编程 - 字符数组与字符串数组寻址消歧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23930833/

相关文章:

php - 创建一个数组,然后将所有内容加在一起

java - 使用for循环和字符串数组时出错

是否可以在 DLL 中使用主应用程序提供的外部函数,而不是将 DLL 函数导出到应用程序?

c - 在 C 中并行化 for 循环

java - 改进我的贪心算法

无法获取类型为 'float' 的右值的地址

c++ - Arduino - 如何使用指针增加(继承的)公共(public)类成员?

c - 这到底是做什么的? [*(字符*)p1]

c - 链接静态库与动态库的问题

C数据类型困惑