#include <stdio.h>
int main()
{
char str[3][15] = {"Pointer to","char","program"};
char (*pt)[15] = str; // statement A
char *p = (char *)str; // statement B
printf("%s\n",p[3]); // statement C - Seg Fault in this line
printf("%s\n",p); // working properly displaying "Pointer to"
printf("%s\n",p+1); // here it is pointing to second element of first array so displaying "ointer to"
printf("%s\n",pt+1); // printing properly "char" as expected
int num[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*nm)[3] = num[1];
int *n = num;
printf("n - %d\n",n[10]); // statement D
printf("nm - %d\n",nm[0][0]);
return 0;
}
我的问题:
请帮助我清楚地了解 char 数组和 int 数组的数据存储机制
在上面的程序中,我理解当指向 char 数组的指针指向 char 的 2D 数组时,如语句 A 所示,它可以正确显示,但是当它被普通 char 指针指向并尝试在语句 C 中打印 char 时,它会出现 SegFault ,相反,它应该打印'n'(第一个数组“指针”中的第三个数字字符)所以有混淆为什么如果int数组我在语句D中得到正确的元素n = 11以及为什么在这种情况下(语句C)它是打印不正确。
如果是 char 数组,数据将如何存储?它会以如下所示的形式存储
char str[3][15] = {{'P','o','i','n','t','e','r',' ','t','o'},
{'c','h','a','r'},
{'p','r','o','g','r','a','m'}};
如果它是这样存储的,那么它应该像语句 D 中显示的整数指针数组一样工作 请帮助我指导这个问题并澄清我在 char 和 int 数组存储的情况下遇到的问题。