两者之间的区别如下:
1、表示的意义不同。
p是一个指针变量的名字,表示此指针变量指向的内存地址,而*p表示此指针指向的内存地址中存放的内容。
2、数量形式不同。
p如果使用%p来输出的话,它将是一个16进制数。*p一般是一个和指针类型一致的变量或者常量。
3、定义不同。
p存放的是地址,而*p是让程序去那个地址取出数据。
例子:
#include <stdio.h>
void main()
{
int x=3
int *p,*q
p=&x,q=&x
printf("%d\n",*p++)
printf("%d\n",(*q)++)
printf("%d\n",x)
}
输出结果为:3,3,4
解释:
*p++:是先取出*p的值,再使p加1
//p是个指针,给p加1,相当于让p指向了x所在地址的下一个位置,而对于x则是没有任何影响
(*p)++:是使*p的值加1.
//*p则是p指向的位置对应的值,题目中是*q,所以此时的*q就是x的值,为3,当输出*q之后,再给*q即x自加1,综上所述,x就会变为4
参考资料:
百度百科-p (C语言)
百度百科-C语言
*p是一个变量,是一个变量。
p是一个地址一个内存地址,不是一个变量。
int *pprintf("%p",p)
会打印出一个16位地址
&p中&是求地址符,例如&a是求a的地址,&b是b的地址
上面说过执行 int *p 之后,p是一个地址但也是一个变量。
&p是一个地址,顺着这个地址能找到一个值,这个值是p,然后p也是一个地址,顺着这个地址能找到另外一个值 p
而 p不再是一个地址,是一个变量就跟 int a=1,b=2; 里一样。
通俗一点解释找一本《C语言程序设计》的书,图书馆有一本《索引大全》的书,里面记录着馆内所有书的位置
通过 《索引大全》 —— 《C语言程序设计》的位置 —— 《C语言程序设计》
上面三个东西分别是&p,p,&*p