C语言中*p和**p有何区别

作者&投稿:衷璧 (若有异议请与网页底部的电邮联系)
c语言中*p++和(*p)++有什么区别?~

我看书中解释:*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和q是申明为类型兼容的指针变量,且都正确赋有合法值且不为NULL,那么,*p=*q是把指针q指向的目标值赋给指针p指向的目标;p=q则是使指针p指向指针q指向的目标(最终是p和q指向了同一目标,这个目标就是q指向的目标)。在q==NULL时,*p=*q非法操作,p=q是合法操作(使p和q同为NULL)。综上,除q为无效(NULL)时不能取值操作外,正常情况下*p=*q操作的是指针指向的目标,p=q操作的是指针本身——这是二者的本质区别。以下代码可以验证:#include "stdio.h"int main(int argc,char *argv[]){int *p,*q,a=334,b;q=&a;p=&b;*p=*q;printf("b = %d,a = %d
",*p,*q);//b获得了a的值p=q,b=123;printf("*p = %d,*q = %d,b = %d
",*p,*q,b);//p,q都指向了a,b值未变q=NULL;p=q;//NULL指针作右值是合法的printf("p = %p,q = %p
",p,q);printf("%d
",*p);//取NULL指针的值*p是非法的return 0;}验证结果如下:

一、表示的东西不同

*p表示p代表相应数据类型在存储单元中存储的首地址,而这个存储单元存储的是相应类型数据的数值。

**p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值。

二、基类型不同

例如int *p1,**p2;

两者本质上都是指针,但是两者的基类型不同。p1的基类型是int,换句话说p1指针指向的是int型的数据,而p2的基类型是int *换句话说p2指向的是指向int型数据的指针,即指向指针的指针。

三、用法不同

例如int *p;

那么p就是指向int类型变量的一个指针。(即数组)

如果int**p;

那么p就是指向int*类型指针的一个指针。(即指向一维数组的指针,即二维数组)



一、表示的东西不同

*p表示p代表相应数据类型在存储单元中存储的首地址,而这个存储单元存储的是相应类型数据的数值。

**p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值。

二、用法不同

例如int *p;

那么p就是指向int类型变量的一个指针。(即数组)

如果int**p;

那么p就是指向int*类型指针的一个指针。(即指向一维数组的指针,即二维数组)

C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

扩展资料:

C语言语言特点:

1、简洁的语言

C语言包含有各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且多以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。

2、具有结构化的控制语句

C语言是一种结构化的语言,提供的控制语句具有结构化特征,如for语句、if⋯else语句和switch语句等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。

3、丰富的数据类型

C语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。

4、丰富的运算符

c语言包含34个运算符,它将赋值、括号等均视作运算符来操作,使C程序的表达式类型和运算符类型均非常丰富。

5、可对物理地址进行直接操作

C语言允许对硬件内存地址进行直接读写,以此可以实现汇编语言的主要功能,并可直接操作硬件。c语言不但具备高级语言所具有的良好特性,又包含了许多低级语言的优势,故在系统软件编程领域有着广泛的应用。

参考资料来源:百度百科-c语言



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语言)

百度百科——指针



*p表示p代表相应数据类型在存储单元中存储的首地址,而这个存储单元存储的是相应类型数据的数值,

**p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值!

区别大了。

*p只是一个指针,
**p是一个指向指针的指针

例如int *p;
那么p就是指向int类型变量的一个指针。(即数组)
如果int**p;
那么p就是指向int*类型指针的一个指针。(即指向一维数组的指针,即二维数组)


C语言中*p和**p有何区别
一、表示的东西不同 p表示p代表相应数据类型在存储单元中存储的首地址,而这个存储单元存储的是相应类型数据的数值。p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值。二、基类型不同 例如int...

C语言中(*p)和*(*P)的含义是什么?
int *p=&a; \/\/这里的*p只是定义p为指针的意思 \/\/*p 其实就相当于a printf("%d", *p);\/\/输出6 p=5; \/\/结果是a也等于5 int (*p)(int a, int b); \/\/这里的*p也只是定义p为指针 int *(*p) (int a,int b);\/\/这里只是定义了p为函数指针 int a;int b;int *q=&a;int *...

c语言中*p是什么意思 c语言中*p的解释
1、c语言中*p表示此指针指向的内存地址中存放的内容。*p一般是一个和指针类型一致的变量或者常量。*p是让程序去那个地址取出数据。2、例子:int a[5]={1,2,3,4,5};int *p=a;\/\/这是在定义指针变量p的同时就直接给它初始化,即把数组a的首地址赋给它。

C语言中*P都有什么含义
p是数据变量时,*p是乘以p的意思。p是有效指针变量时,*p是取p指向的目标值的意思。在声明语句中,*不与p结合而与前面的类型符结合,表示声明一个该类型的指针变量p——如int *p;表示声明一个int *型变量p。

C语言问题*p与(*p)的区别
double *p(int, int*) \/\/这个是声明一个函数,此函数返回双精度浮点型指针,有两个参数,分别是整型和整型指针 double (*p)(int, int*) \/\/这是声明一个指针,此指针是一个函数指针,指向一个函数,这个函数有两个参数:整型数和整型数指针;返回值是双精度浮点型数 ...

C---语言 (*p)()和*p()有什么不同?
(*p)()是指向函数的指针,可以说他是一个地址;*p()是指针函数,可以把他当成一个函数。具体的区别,你可以找谭浩强《C语言程序设计》看看。那里面讲得很清楚。

指针p与* p的区别是什么?
c语言的指针部分 *p与p区别如下:1、作用不同 p表示此指针指向的内存地址中存放的内容。p是一个指针变量的名字,表示此指针变量指向的内存地址。2、输出内容的格式不同 p常用在一个和指针类型一致的变量或者常量。p输出一个指针的地址,通常是输出一个16进制的数。3、效果不同 p是让编译器从指定的...

c语言中p*是什么意思,他和*p的区别是什么?
p 如是出现在算术表达式中,这个星号就是乘号,表示相乘,如果是出现在声明中(如变量定义),那就表明p是一种数据类型,p*表示要声明这种类型的指针变量。p 依然可以表示相乘的运算,也可表示提取p指针指向的位置保存的值。例如:int a=9;int *p=a;printf("%d",*p);这个printf()调用中的*p表示...

c语言中**p是什么意思 希望能在2014-04-07 08-04之前解答
的意思是指向,*p 指向某个变量的地址,**p 指向*p的地址,即指向指针的指针。

C语言中,指针那块的,**P 是什么意思!?
p为一个指向指针的指针,*p为其指向的指针,**p为其指向的指针所指向的内容

中沙群岛的岛礁及其海域15296412221: c语言定义指针时**p与*p的区别 谢谢啦 -
第竿卡舒: int**p只能指向int*p,而*p只能指向intp. 所以int**p要想指向int p,就不能加一个*号了,要加两个*号.加一个是int*p,加两个才是int p

中沙群岛的岛礁及其海域15296412221: C语言中,*p和p有什么区别 -
第竿卡舒: 如果p为普通指针变量,那么:p代表内存中的某存储单元的地址,而*p代表该存储单元中的存储的内容.

中沙群岛的岛礁及其海域15296412221: C语言中,指针变量*p与**p有什么区别?
第竿卡舒: *p和**p都是指针,**p是*p的地址 .

中沙群岛的岛礁及其海域15296412221: *p和**p的区别 -
第竿卡舒: *p和**p的区别: 一、指针级别不同 *p是一级指针. **p是二级指针. 二、表示的含义不同 *p表示p所指向的地址里面存放的是一个int类型的值 . **p表示p所指向的地址里面存放的是一个指向int类型的指针. 三、指向的内容不同 *p=a指针p将...

中沙群岛的岛礁及其海域15296412221: C语言中 **p 和*p什么区别?
第竿卡舒: *p是指一个指针,**p是指一个指向指针的指针

中沙群岛的岛礁及其海域15296412221: C语言中(*p)和*(*P)的含义是什么? -
第竿卡舒: 你的疑问恐怕是出在二维数组里吧 例如:int a[3][5],*p;p=a; 上面的第一行表示定义一个指针变量p,下面一行表示p指向数组a的首行 a+1表示下一行首地址 *p等价于*(p+0)等价于p[0] 表示p[0]行首地址 p[0]+1表示p[0][1]的地址 p[0]+2表示p[0][2]的地址 而*(p[0]+2)表示p[0][2]这个元素的值

中沙群岛的岛礁及其海域15296412221: c语言中p*是什么意思,他和*p的区别是什么? -
第竿卡舒: 如果p是用typedef定义的一个类型的话,那么p*就是这种类型的指针变量类型,不然就是错误的用法把! *p如果出现在声明语句中,说明p是一个指针,如果前面已经声明过p那么*p就是对指针p的解引用,*p代表p指向的那个变量

中沙群岛的岛礁及其海域15296412221: C语言 (*p)[] 与*p[]区别何在
第竿卡舒: 一个是指向数组,一个是指向P

中沙群岛的岛礁及其海域15296412221: 请问c语言中 *p喝&p的区别 -
第竿卡舒: 我怎么感觉它两是一样的,*和++虽然都是单目运算符,但是p++是后加,所以*(p)++,*p++都是先取p的指向内容,再让p加1.

中沙群岛的岛礁及其海域15296412221: C语言中指针p与*p的区别? -
第竿卡舒: p是一个地址*p是这个地址中的数据

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网