C语言 *p 和p的区别?

Python030

C语言 *p 和p的区别?,第1张

两者之间的区别如下:

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