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/