Oma*_*ñoz 3 c pointers dereference
所以我试图找出指针,我读了一些关于指针指针的帖子,但我仍然无法弄清楚为什么这个程序运行没有问题
#include <stdio.h>
#include <assert.h>
int main(){
char* p = "abc";
char** pp[2];
pp[0] = &p;
assert(*pp[0]==**pp);
printf("Comparison: %s, %s\n",**pp, *pp[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,内存看起来像这样
Memory Address (hex) Variable name Contents
1000 'a' == 97 (ASCII)
1001 'b' == 98
1002 'c' == 99
1003 0
...
2000-2003 p 1000 hex
...
3000-3003 pp[0] 2000 hex
Run Code Online (Sandbox Code Playgroud)
在这一点上假设我记忆正确...我希望*pp [0]进入记忆并说......
所以pp [0]指向p的地址,即0x2000,通过解除引用,我希望得到地址0x2000的内容,在我的观点中意味着我会得到0x1000,但事实并非如此该计划的输出是:
OUTPUT
abc, abc
Run Code Online (Sandbox Code Playgroud)
在**pp的情况下,我认为它首先取消引用pp,这将给我们任何pp指向的内容,这意味着0x2000的内容(这是0x1000)然后通过再解除引用我们得到地址0x1000的内容
为什么他们会平等?我在哪里错过了什么
在大多数情况下,如果你有一个数组a,那么a就是它的缩写&a[0].(有一些例外,例如with sizeof a或&a).
所以**pp真的意味着**&pp[0].
&pp[0]是地址pp[0],所以*&pp[0]相当于pp[0],所以**&pp[0]相当于*pp[0].
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |