为什么这会发生在 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; 未初始化,因此您正在写入随机内存位置。
    • 因此,*ptra 的地址:(size_t)&a == 634927948
  • int *ptr=&a;表示“ptr是一个指针,指向a所在的内存”。
    • 因此,*ptr地址a的值,也就是a == 10本身

下一行在赋值前取消引用指针。 ptr 内存位置的值分配给 a.

的内存地址
*ptr = &a; 

该行应该是:

ptr = &a; 

ptr会指向a的内存位置。

如果您使用:

*ptr = a; 

指针指向(已经)的内存位置将被赋值为a