p=&x;和*p=10;这两行应该怎么理解,我想不通的是我个人理解应该是x先被赋值最后才能够输出,但是这串代码是将后赋值的指针的值进行输出

#include  <stdio.h>
void main()
{
    int x,*p;
    p=&x;
    *p=10;
    printf("%d\n",x);
}

供参考:

#include  <stdio.h>
void main()
{
    int x, * p; //定义了两个变量,x  p 在内存划出一块空间,都有固定的地址
    p = &x;    //将变量 x 的地址值赋值给 指针 p
    *p = 10;   // *p解引用,这句等价于 x = 10;  
    printf("%d\n", x);
}

在声明int x的时候,x就已经分配了地址,只不过此时没有初始化,里面的值也能打印,但是会是个随机数(不确定是什么软件残留的)
而p这个指针指向了x的地址,给*p赋值就是在给x赋值

p本身指针变量,只用于存放地址,而p=&x就表示p本身存放入x所在内存的地址,也就是p指向了x;

*p=10中,则表示p指向的内存中存放入数值10,而此时p中本身的值还是一个地址,只是间接地把x变量赋值了而已。