我在这里有一个非常简单的代码,但我无法真正理解内存上发生了什么:
#include <stdio.h>
#include <stdlib.h>
int main(){
int v[8], *u = &v[2];
v[2] = 20;
printf("%d",*u);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,当我要求它打印*你,它会给我20.我不明白为什么.我是指针的新手,我从未见过你给一个*指针值的例子.
我只能制作简单的代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
int a = 10, *b;
b = &a;
printf("%d",*b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我可以很容易地理解发生了什么.在这两种情况下,有人可以对内存中发生的事情进行比较吗?
非常感谢你!
小智 5
int v[8], *u = &v[2];
Run Code Online (Sandbox Code Playgroud)
这一行定义了两件事.它正在制作一组称为v具有8个整数存储空间的整数.它也是一个指向int的指针,调用u它被设置为指向第二个元素v.
v[2] = 20;
Run Code Online (Sandbox Code Playgroud)
此行将v数组中的第二个元素设置为20.请记住,u该元素也指向上一行中的此元素.
printf("%d",*u);
Run Code Online (Sandbox Code Playgroud)
该行只打印u指向的值.由于它指向数组中的第二个元素v,并且该元素设置为20,因此它将打印20.
你的第二个代码:
int a = 10, *b;
b = &a;
printf("%d",*b);
Run Code Online (Sandbox Code Playgroud)
也可以写成:
int a = 10, *b = &a;
printf("%d",*b);
Run Code Online (Sandbox Code Playgroud)
它只是将第二行移到第一行.那么你的两个例子之间的唯一区别就是数组符号.