我想弄清楚2d char数组在内存中的样子。 例如:C中的字符串如何在内存中看起来像?
char c[][5]={"xa","ccc","bb","j","a","d"};
printf("TEST: %u %u %u %u \n\n",c[0],*c[0],c[0]+1,*(c[0]+1));
输出:
TEST:3214246874 120 3214246875 97个
C [0] = *(C + 0)是字符串 “XA”,并等于3214246874,所以我猜c [0]是char数组“xa”的地址。 当我把一个*到c [0]时,我得到了120,这是ascii中的'x'。
所以我认为c数组中的第一个空格是char x的地址。 之后,我尝试了与c [0] +1相同的内容,并打印了下一个地址,然后我将*和我得到了97,这是ascii中的'a'。
所以我假设数组c是这样的:
c[0] c[1]
------------------------------------------------------------------
| pointer to x | pointer to a ||| pointer to c | pointer to c | etc ...
----------------------------------------------------------------------
,但我在网上搜索,和我没有找到我的假设任何证据。
它将只是一个大小为5 * 6的连续内存区域,其中包含字符。没有指针将被存储在那里。 –
使用'%u'打印指针调用UB。 –
Eugene Sh。是正确的,但只要看一下调试器中的内存,或者打印出来,以便为证据提供支持。 – LordWilmore