C语言中关于int *p = &i; 语句的疑惑

初学指针,明白了&运算符是取地址,而*运算符是取地址中的实际值。

那为什么可以使用int *p = &i; 这样把地址赋给实际值的操作?

int i = 10; 
int *p;
p = &i;
printf("%d", *p);

int i = 10;
int *p = &i;
printf("%d", *p);

所得*p的值是一样的,这又是什么原因?

都没有说到点上
* 这个东西含义非常多
在四则混合运算中它是乘号,在*p里它代表"解地址",而int *里它是类型的一部分,代表定义一个一级指针,int **则是二级指针,以此类推
此外,在正则表达式中*还代表匹配任意多个前导字符
你不要一见到*就以为是解地址操作

看成int *就行了,这是作为一个整体的,表示指针类型,所以p是指向地址的一个指针变量。

int *p = &i;  是写到一起了,拆开就是
int *p;  //声明指针变量
p = &i;  //给指针变量赋值。p的值是一个地址,因此需要&i,而不能是i。

下面的 int i=10; 也是写到一起的,分开写
int i;
i=10; 


首先请允许我来解释下一指针,看到*这个操作符时我们就要注意这是一个指针,指针通俗来说是地址,只有向内存申请空间才能存储空间,所以p是一个指针变量,本质上是一个变量,这里的int表示的是这个指针指向的是一个int的类型的变量。所以图一图二中把i的地址给到p指针变量,通过解引用来找到i的内容。图一是创建一个指针变量再赋值,图二是创建变量申请内存空间的同时赋值。