为什么这会发生在 C 指针上?
Why is this happening to C pointers?
当我使用这段代码时,输出不正确。
#include <stdio.h>
int main() {
int a, *ptr;
a=10;
*ptr=&a;
printf("%d",*ptr);
return 0;
}
输出为:634927948
但是当我使用这段代码时,它给出了正确的输出。
#include <stdio.h>
int main() {
int a=10;
int *ptr=&a;
printf("%d",*ptr);
return 0;
}
输出为:10
*ptr=&a;
表示“将a
的地址写入ptr
指向的内存中”。请注意 int *ptr;
未初始化,因此您正在写入随机内存位置。
- 因此,
*ptr
是 a
的地址:(size_t)&a == 634927948
。
int *ptr=&a;
表示“ptr
是一个指针,指向a
所在的内存”。
- 因此,
*ptr
是在地址a
的值,也就是a == 10
本身
下一行在赋值前取消引用指针。 ptr
内存位置的值分配给 a
.
的内存地址
*ptr = &a;
该行应该是:
ptr = &a;
ptr
会指向a
的内存位置。
如果您使用:
*ptr = a;
指针指向(已经)的内存位置将被赋值为a
。
当我使用这段代码时,输出不正确。
#include <stdio.h>
int main() {
int a, *ptr;
a=10;
*ptr=&a;
printf("%d",*ptr);
return 0;
}
输出为:634927948
但是当我使用这段代码时,它给出了正确的输出。
#include <stdio.h>
int main() {
int a=10;
int *ptr=&a;
printf("%d",*ptr);
return 0;
}
输出为:10
*ptr=&a;
表示“将a
的地址写入ptr
指向的内存中”。请注意int *ptr;
未初始化,因此您正在写入随机内存位置。- 因此,
*ptr
是a
的地址:(size_t)&a == 634927948
。
- 因此,
int *ptr=&a;
表示“ptr
是一个指针,指向a
所在的内存”。- 因此,
*ptr
是在地址a
的值,也就是a == 10
本身
- 因此,
下一行在赋值前取消引用指针。 ptr
内存位置的值分配给 a
.
*ptr = &a;
该行应该是:
ptr = &a;
ptr
会指向a
的内存位置。
如果您使用:
*ptr = a;
指针指向(已经)的内存位置将被赋值为a
。