我这里有一段非常简单的代码,但我无法真正理解内存中发生了什么:
#include <stdio.h>
#include <stdlib.h>
int main(){
int v[8], *u = &v[2];
v[2] = 20;
printf("%d",*u);
return 0;
}
所以基本上,当我要求它打印 *u 时,它会给我 20。我不明白为什么。我是指针的新手,我从未见过您为 *pointer 赋值的示例。
我只能编写简单的代码,例如:
#include <stdio.h>
#include <stdlib.h>
int main(){
int a = 10, *b;
b = &a;
printf("%d",*b);
return 0;
}
我可以很容易地理解发生了什么。有人可以比较这两种情况下内存中发生的情况吗?
非常感谢!
最佳答案
int v[8], *u = &v[2];
这一行定义了两件事。它正在创建一个名为 v
的整数数组,其中存储了 8 个整数。它还创建了一个指向 int 的指针,称为 u
,它被设置为指向 v
中的第二个元素。
v[2] = 20;
此行将 v
数组中的第二个元素设置为 20。请记住,u
也指向上一行中的此元素。
printf("%d",*u);
这一行只是打印了 u
指向的值。因为它指向数组 v
中的第二个元素,并且该元素设置为 20,所以它会打印 20。
您的第二个代码:
int a = 10, *b;
b = &a;
printf("%d",*b);
也可以写成:
int a = 10, *b = &a;
printf("%d",*b);
它只是将第二行移动到第一行。那么你的两个例子之间的唯一区别就是数组符号。
关于c - 说一个指针等于C中内存中的一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175227/