c语言中指针p和p++什么区别,c语言中指针p[i]和p++什么区别

2021-01-20 14:55:10 字数 4543 阅读 2205

1楼:匿名用户

你问的是啥?、

指针p[i],说明p是一个数组指针,指针p[i] 做p++,这是就变成指针p[i+1]另外指针。

若是像你所描述的,*p[i]和p++怎么比较?根本不是一个概念的东东,你要比较啥?

一个说数组指针,一个是自加。。。

在c语言的指针运算中*(p+1)与p+1有什么区别 p是指针

2楼:匿名用户

一、bai

指代不同

1、*(p+1):表示du具体的数值

。zhi

2、p+1:表示内存地址dao。

二、指向的

值不同版

1、*(p+1):指针p所指权向的内存地址单元的下一个内存地址单元中的值。

2、p+1:指针p所指向的内存地址的下一个内存地址。

三、内存表示不同

1、*(p+1):*的优先级比+的优先级高,所以*p+1在编译器中是先取出p指向的int值然后加1。

2、p+1:直接将内存中指向的地址加1,就是将要指向的地址。

3楼:天云一号

*(p+1)表示具体的数值,指针p所指

向的内存地址单元的下一个内存地址单

元中的值;

p+1 表示地内址,指针容p所指向的内存地址的下一个内存地址。

可以通过下面的实例来理解*(p+1)与p+1之间的区别:

int*p;//定义一个int类型的指针pinta[3]=;//定义一个int类型的数组a,并进行初始化p=a;//使指针p指向数组a的首地址printf("%d",*(p+1));//输出2,等价于a[1]

printf("%x",p+1);//以16进制形式输出a[1]的地址(如08ff12),等价于&a[1](&为取地址运算符)

4楼:天河

p+1是指p指针加1即p的下一个指针,*(p+1)是指p+1所指向的对象

5楼:h资

举个例子吧 比如a[5]=;*(p+1)指的是a[1]即4,而*p+1指a[o]加1即3

6楼:匿名用户

当然有区别 指向指针的指针*(p+1) p+1就p的下一个指针

c语言中,p为指针,那么*p和&p是一样的吗,什么区别

7楼:匿名用户

上面是我自己做的原理图,深入到内存中,你就懂了.不懂随时call

8楼:匿名用户

楼主发现这两个的区别了吗?

*p &p

他们的区别无非就是p前面带的符号

,如果楼主知道该符号的含义就不会提这个问题了;

* 取值运算符?

& 取地址运算符?

* 和 & 互为反运算符;

楼主还有疑问吗?

加油!!

9楼:xiao蝌蚪找妈妈

在声明指针变量的时候,*p表示声明p是指针变量,比如int *p(声明p为int型指针变量);在调用指针变量的时候,*p表示指针变量p所指向的变量的值,比如int a=5,b; int *p;(声明p为int型指针变量),p=a; b=*p;(把p所指向的变量的值,即a的值赋给变量b)。对于&p,则是代表变量p的地址,显然和以上*p的两种意思都不一样

10楼:

*p 是取p的内容

&p 是取p的地址

11楼:用户名都是渣渣

*p是p指向的内容,&p是保存p指针的内存地址

c语言问题。 *p+i与*(p+i)有什么区别啊?

12楼:匿名用户

写个c程序解释吧。

#include

intmain()

,*p=a;

printf("%d%d\n",*p+1,*(p+3));

return0;

}输出为 10 6;

为什么呢?因为 *p = a 把 a 数组的首地址的值放在 p 处,所以p = a,*p =a[0]= 9 => *p + 1 = 9 + 1 = 10.

p + 3 就是a数组的首地址往后移动3位,即p = a[0], p + 3 = a[3]的值,就是6了。

13楼:匿名用户

其实在定义时你这样理解就很清楚答案了:

char *p;理解成char (*p);*p在一起是一个char。那么,*p+i就是*p的值加上i,而*(p+i)是在先p+i再*操作,*是什么意思呢,在这里是“取值”。所以,*(p+i)是把指针移动i个位置,再返回前地址的值。

14楼:匿名用户

地址加i,地址变了。地址

c语言的指针部分 *p与p区别

15楼:枫玺

c语言的指针部分 *p与p区别如下:

1、作用不同

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

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

2、输出内容的格式不同

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

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

3、效果不同

*p是让编译器从指定的地址中读取出数据。

p是用来存放要读取数据的地址。

扩展资料c语言中使用指针的作用:

1、指针使程序的不同部分能够共享数据

类似于共享内存,如果将某一个数据值的地址从一个函数传递到另外一个函数,这两个函数就能使用同一数据。

2、利用指针,能在程序执行过程中预留新的内存空间大多数情况下,可以看到程序使用的内存是通过显式声明分配给变量的内存。但是在很多应用场合中,可能程序运行时不清楚到底需要多少内存,使用指针可以让程序在运行时获得新的内存空间,并让指针指向这一内存更为方便。

3、指针可以用来记录数据项之间的关系

在高级程序设计应用中,指针被广泛应用于构造单个数据值之间的联系。比如,程序员通常在第一个数据的内部表示中包含指向下一个数据项的指针(实际上就是链表了),来说明这两个数据项之间有概念上的顺序关系。

16楼:匿名用户

p是指针变量,其值是一个变量的地址。p收到了哪个变量的地址,就指向哪个变量。该变量成为p的对象。

*p是p所指向的对象的值。

例如:int i=3,*p;

p=&i; 注意:p收到i的地址,故p指向i,i是p的对象

printf("%d,%d\n",i,*p); 输出:3,3 注意:*p是p所指向的对象的值,即i的值。

祝学业进步!

17楼:匿名用户

我举个例子吧:

int k = 5;

int *p = &k;

这时*p就表示k的值5,而p表示的就是k的地址

18楼:龙啸天风

赋值的时候*p表示这是一个指针,p表示是一个数

而用的时候如果p是一个指针,那么*p表示所指向的内容,p本身存着一个地址。

19楼:镜面世界

呃第二个前面无运算符相当于p,有运算符且p是函数名或函数指针时,加括号相当于p,不是则无意义,p是函数名且返回指针且是调用时,不加括号是返回的指针的间接引用,第一个p不是指针的话无意义,如果是指针(什么指针都行,包括函数指针等不常用的,但不能是野指针,运行时会报错),如果这个表达式前面是运算符号,相当于p,如果前面是另一个表达式,是*p与那个表达式位与,p是函数指针时加括号相当于p,p是函数指针或函数的二级指针且该函数返回引用时是返回的引用的内存地址。(呼!累死我了,给个满意啊!

看不懂的话等我有时间弄个**)

20楼:匿名用户

int pp=5; //开辟4字节内存给pp,其中存放的是5的二进制值;

int *p=&pp; //开辟4字节内存给p,其中存放的是pp的地址值(只有定义成int *类型的才能存放地址值);

21楼:言玉甚人

p中放的是地址

int a=321;

int *p=a;

其实a是一个地址的别名,这样方便人们识别;

p也是一个地址,并且存储空间中的这个地址中放的是变量a即321这个数在存储器中的地址,而“*”的作用就是将p这个地址中存放的数所代表的地址中所存放的数据。

22楼:颠儿父

int a = 1; // 内存中a有一个地址比如:

0x11 中存的值是 1

int *p = &a; // 内存中p有一个地址比如:0x22 中存的值是 0x11

p的值是0x11, *p的值是1

23楼:匿名用户

*p是指针,里面存的是里面存的地址的数,p存的是地址

C语言中,定义double p的指针,那么p的类型是

1楼 匿名用户 直接输出p就是一个长整型的数字,你定义的double 就是指的这个内存地址保存的数据的类型,输出这个数据则会带有小数点,输出地址不会 2楼 匿名用户 汗死。。。指针地址是用intger类型的。。占八位。。 跟你这个double有什么关系。。你打印下就知道了。用double来定义是因为...

c语言中数组名和指针变量的区别,C语言中数组名和指针的区别

1楼 销 数组名除了sizeof会返回数组大小,其他的实况下是相当于一个指针常量无区别的 指针常量也就是说,不能改变数组名的值,比如int a 10 a a a a 10等都是非法的 c语言中数组名和指针的区别 2楼 匿名用户 数组在当作参数传递时,可以当作指针 当然,参数传递相当于赋值操作,所以用...

C语言中的“行指针”与“元素指针”有什么区别

1楼 键盘雀跃 int a 4 1 2 3 4 a 0 a 1 a 2 a 3 a是一维数组名,代表数组的首地址 也就是a 0 a 1 指针移动2个字节,指向下一个数组元素,就是a 1 int a 3 4 a 4 或a 4 或a 3 4 都可以表示行指针 操作a是二维数组名,代表二维数组的首地址,也...