Qui*_*rty 2 c arrays pointers char
我知道这个话题已经讨论了好几次了,我想我基本上知道数组和指针之间的区别,但是我对数组如何精确地存储在内存中很感兴趣。
例如:
const char **name = {{'a',0},{'b',0},{'c',0},0};
printf("Char: %c\n", name[0][0]); // This does not work
Run Code Online (Sandbox Code Playgroud)
但是,如果这样声明:
const char *name[] = {"a","b","c"};
printf("Char: %c\n", name[0][0]); // Works well
Run Code Online (Sandbox Code Playgroud)
一切正常。
当你定义一个像
char const* str = "abc";
char const** name = &str;
Run Code Online (Sandbox Code Playgroud)
它看起来像这样:
+---+ +---+ +---+---+---+---+
| *-+---->| *-+--->| a | b | c | 0 |
+---+ +---+ +---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
使用表格定义变量时
char const* name[] = { "a", "b", "c" };
Run Code Online (Sandbox Code Playgroud)
您有一个指针数组。看起来像这样:
+---+ +---+---+
| *-+---->| a | 0 |
+---+ +---+---+
| *-+---->| b | 0 |
+---+ +---+---+
| *-+---->| c | 0 |
+---+ +---+---+
Run Code Online (Sandbox Code Playgroud)
可能令人困惑的是,当您将此数组传递到某个地方时,它衰减为一个指针,并且您得到了:
+---+ +---+ +---+---+
| *-+---->| *-+---->| a | 0 |
+---+ +---+ +---+---+
| *-+---->| b | 0 |
+---+ +---+---+
| *-+---->| c | 0 |
+---+ +---+---+
Run Code Online (Sandbox Code Playgroud)
也就是说,您将获得一个指向数组第一个元素的指针。递增此指针将移动到数组的下一个元素。