我试图弄清楚 2d char 数组在内存中的样子。例如:
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));
Run Code Online (Sandbox Code Playgroud)
输出:
测试:3214246874 120 3214246875 97
c[0]=*(c+0) 是字符串“xa”,等于 3214246874,所以我猜 c[0] 是字符数组“xa”的地址。当我将 * 放入 c[0] 时,我得到 120,即 ascii 中的“x”。
所以我认为 c 数组中的第一个空格是字符 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 ...
----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
但是我在网上搜索并没有找到任何证据来证明我的假设。