Jan*_*Jan 4 c arrays string pointers
有人告诉我,回答我的最后一个问题是
char *name[] = {"xxx", "yyy"}
Run Code Online (Sandbox Code Playgroud)
由编译器更改为
char *name[] = {Some_Pointer, Some_Other_Pointer};
Run Code Online (Sandbox Code Playgroud)
我尝试了以下内容来理解:
printf("%p\n", &name);
printf("%p\n", name);
printf("%s\n", *name);
printf("%c\n", **name);
Run Code Online (Sandbox Code Playgroud)
所以作为输出它给了我:
0xfff0000f0
0xfff0000f0
xxx
x
Run Code Online (Sandbox Code Playgroud)
你能解释一下指针"name"的地址如何与指针"name"所指向的地址相同吗?根据我的理解,指针"name"本身占用8个字节.如何在内存中占用4个字节的第一个字符串"xxx"与指针位于同一位置?
首先,当你有像nameC中的任何数组时,数组的值是它的第一个元素的地址.请注意,此值不存储在某个变量中.它在编译的汇编代码中用作立即值.所以考虑它的地址是没有意义的.
其次,由于数组作为一堆连续位置存储在存储器中,所以数组的地址定义为第一个元素的地址.因此,对于任何数组,A您都具有以下相同的地址
&(A[0]) == A == &A
Run Code Online (Sandbox Code Playgroud)
如果你有指针数组或其他什么,它不会改变任何东西.