所有栏目

p指针详解

已输入 0 字
优质回答
  • int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针)例:int a=5; //定义整形变量 int *p=&a; //定义一个指针指向这个变量 int **p1=&p; //定义一个二级指针指向p指针 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语言中是不合法的。

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

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

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

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

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

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

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

    2024-01-01 14:57:25
最新问题 全部问题