talk is cheap, show me the code
#include <stdio.h>
int main(void){
int i =10;
/*
首先取地址符&代表什么?其实非常简单:
int i =10;
int x =i;
这样的赋值,是将i中保存的值赋值给x,而:
int i =10;
//实际上是将它的地址作为值赋值给p
int *p = &i;
你想把这个地址赋值给一个int变量也可以,打印出来的实际上也是地址
但是普通变量没有解引用(我更愿意称为解地址)操作符,只有地址所以不可以操作
int valueP = &i;
试一试打印*p和valueP的地址是不是一样的?这个指针变量不要用解地址,否则就是打印指向变量的值了
printf("作为指针变量保存的值:%#x \n",p);
printf("取原始i的地址:%#x \n",&i);
printf("valuep的地址:%#x",Valuep);
我们发现这三个的值是一样的,但是他们代表的含义不一样
valueP实际上是保存了i的地址,因为i传给他的就是地址,这个i的地址在它那里认为是一个普通的值,因为它只是一个int变量
p变量也是保存了地址,它的值就是i的地址,但是,它可以使用解地址运算符,去解析这个地址使得p变量将它保存的值认为是一个地址并进行指向,可以对被指向的地址做一些操作,就相当于操作这个地址中那个变量;
试试*p = *p +1;
printf("i的值现在是%d",i); //i+1了
这句话实际上是解析p中保存的地址,并指向这个地址然后将这个地址中保存变量的数值+1;
*/
return 0;
}