C语言p和&p的区别

Python016

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

#include <stdio.h>

void main()

{

int *p//P是一个整型指针

printf("%d\n",p)//以10进制整数的形式输出指针P的值

printf("%d\n",&p)//以10进制整数的形式输出指针P的地址

}

P是指针

&P是指针P的地址

*P是指针P的内容,也就是P所指向的那个地址

注意,内存中的地址都是16进制的,可以转化为10进制,不过不是很推荐这么做。

指针也是整数编号,也是可以进行运算的。

计算机内存就好比是一个有编号的抽屉,每个小单元(字节)都有编号,从0开始到最大内存数。

程序需要访问哪个内存,就得告知计算机在哪个编号。

题中p一开始指向字符首地址,经过while后指向字符串末尾,相减就是字符串的长度。字符串是存在连续的内存空间,所以可以这么算长度。

C语言中,*p 和p都常用在指针当中表示一个指针变量,*p 和p的区别:

1、表示的含义不同

*p表示此指针指向的内存地址中存放的内容。

p表示一个指针变量的名字,指此指针变量所指向的内存地址。

2、输出的格式不同

*p一般是一个和指针类型一致的变量或者常量。

p输出的是一个16进制数, 输出一个指针的地址。

3、功能不同

*p是让程序去那个地址取出数据。

p存放的是地址。

例子:

1、int a[5]={1,2,3,4,5}

int *p=a//这是在定义指针变量p的同时就直接给它初始化,即把数组a的首地址赋给它。

2、int a[5]={1,2,3,4,5}

int *p//声明指针变量p

p = a

扩展资料

(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。可以用赋值语句对内存地址赋值。

例:

int *p

p=2003H

*p=3000H

结果:

**p=*(*(p))=*(*(2003H))=*(3000H)=3000H。

&&p=&(&(p))=&(3001H),此时出错了,3001H 是个常数无法存放地址。

*&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。

参考资料来源:百度百科——p (C语言)

百度百科——指针