c 语言二级指针,c语言二级指针的作用

kodinid 5 0

大家好,今天小编关注到一个比较意思的话题,就是关于c 语言二级指针问题,于是小编就整理了3个相关介绍c 语言二级指针的解答,让我们一起看看吧。

  1. c语言二级指针中二级指针p,*p是地址还是值,为什么有的时候就是值而不是地址?
  2. C语言中的二维数组名是一个二重指针吗?
  3. p指针详解?

c语言二级指针中二级指针p,*p是地址还是值,为什么有的时候就是值而不是地址?

这个问题也是困扰的,我到现在都有点乱。p是指针,有就是地址。*p是指针向的值。对于数值型的,这样理解没错。不过对于字符等其他类型有点怪,举个例子:char str=“abc”,*p;p=&str;输出*p 结果是a输出p 结果是abc。

C语言中数组名是一个二重指针吗?

1、二维数组名不是二级指针,它只是一个比较特殊的常量指针。包括三维,四维,乃至N维数组也是如此。只要是数组,那么它就是一个普通的常量指针。2、二级指针p也可以解释为指针的指针,即p内保存的值实际上还是一个指针,计算:*p的值实际上是一个指针值,那么 *(*p)即二级指针指向的最终值。对于二维数组a[2][2],a也是一个地址,并且这个值也等于a[0],也等于a[0[0]的地址,即&a[0][0],由此看来对a取地址的值是一个变量值(不是指针),所以a并不是一个二级指针,最多算一个一级指针。

c 语言二级指针,c语言二级指针的作用-第1张图片-安济编程网
图片来源网络,侵删)

p指针详解?

p指针在计算机科学中,是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。

由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。

因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

c 语言二级指针,c语言二级指针的作用-第2张图片-安济编程网
(图片来源网络,侵删)

高级语言中,p指针有效地取代了在低级语言,如汇编语言机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。

p指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。

作个比喻,***设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;

c 语言二级指针,c语言二级指针的作用-第3张图片-安济编程网
(图片来源网络,侵删)

根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。

*p :一级指针,表示p所指向的地址里面存放的是一个int类型的值

int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针)

例:

int a=5; //定义整形变量 int *p=&a; //定义一个指针指向这个变量 int **p1=&p; //定义一个二级指针指向p指针 /* 那么取出5的方式都有哪些呢? */ printf("a=%d",a); printf("a=%d",*p); printf("a=%d",**p1);

以上3行输出的值都是5 。

回过来看标题问题:*&p和&*p

根据运算优先级,*&p 等价于*(&p)。&*p 等价于&(*p)。

1、如果p是int *指针变量,那么*&p = p,&*p = p,都是p,但还没定义p指向哪,存的是谁的地址。

2、如果p是一个int变量,那么*&p = p;而&*p是非法的,因为*p非法。

比如int p =10;那么*&p = *(&p) = p = 10(即从p的地址取值),而&*p = &(*p) 则非法,因为p=10,*10是取内存地址为10的值,这在c语言中是不合法的。

到此,以上就是小编对于c 语言二级指针的问题就介绍到这了,希望介绍关于c 语言二级指针的3点解答对大家有用。

标签: 指针 地址 一个