解释一:
其实没那么复杂。主要是区别于在声明定义的时候,有的人会迷惑,要不要加*
如下
int *p
p=&x;//此处明明是p=&x???????,好往下看
int *p=&x//其实在声明的时候这样也是可以的。但是这样写定义不明确。
我们现在来总结一下,在定义的时候*号,只是一个说明符。意义是告诉你p是一个指针,而不是一个其他数。在声明的时候就一定需要*了,
所以请注意上面的对比。
在引用的时候区别就相当简单了
p是指针变量,指的是一个变量的地址。
*p代表的是所指向的这个变量的值。
举例:
int a=3;
int *p
p=&a;
printf("%d%d",*p,p);
这个时候两个输出的值,第一个就是3(变量的值),第二个输出的是变量a存储的地址单位。
还有另一种解释,不过我感觉稍微差点 :
解释二:
定义,声明的时候,必须写
如
int * ip;
char * cp;
double *dp=NULL;
在使用的时候,*号并不是指针的标志,而是一种运算符号,意思是解应用。
int a=5;
int b=3;
int * ip=&a;
那么,直接使用ip,ip是这个地址,是一个指针,比如ip=&b,那么ip就指向了b。
而使用*ip,是对ip进行解引用计算,也就是取出ip指向的内容,*ip的值是5(a的值),*ip=b,是对ip指向的地址赋值,此时你输出a,得到的值是3
希望能帮到你,不懂再问我
***********************************************
一个指针,指向一个数据,也就是间接地使用了这个数据,我们可以称之为引用。
直接使用ip,就是间接使用(得到地址),通过地址解析出原始数据,可以称之为解引用,所以*ip就得到了ip指向的数据。
可能叫做 "地址解析"之类的你更容易明白吧