在c语言中int **p,如果想取它的值,用*p来表达吗?
int*p[4]是指针的数组,也就是说它是一个数组,数组里存的是一个个的指针
int(*p)[4]是数组的指针,也就是说它是一个指针,指向的是一个数组。指针指向的类型会影响到指针加减运算时地址的位移。比如说有一个数组 int a[4],加上取址运算符 &a,这个表达式的类型就是指向数组的指针,可以这样赋值 p = &a;。一般用于向函数传递二维数组的时候使用这种类型,这时还有一种更直观的写法
void matrix_sum(int matrix_a[][4], int matrix_b[][4]) {...}
这种写法和
void matrix_sum(int (*matrix_a)[4], int (*matrix_b)[4]) {...}
是等价的。
2 个*号,声明指向指针的指针。它的意思是“它是一个整数,这个整数指向某个内存地址,一次访问sizeof(int)长度,其值是一个整数,那个整数值指向某个内存地址,一次访问sizeof(BTree)长度。
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。
扩展资料
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。
意思是通过它能找到以它为地址的内存单元。 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。
作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。
在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)【用来指向该内存地址所对应的变量或数组】。指针一般出现在比较接近机器语言的语言,如汇编语言或C语言。面向对象的语言如Java一般避免用指针。
指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。
另外,指针也指钟表中用来指示对应时间的部件。
参考资料来源:百度百科-二级指针
语句int **p;定义的p是二级指针,也就是,“指向指针的指针”,所以,用*p取出来的,仍然是一个地址。要想取出存放的用户数据,必须要用**p,才可以。
另外,你题目中的叙述有点问题,就是那个“它”指的是谁,是p吗?
现在分析一下:
当你用int **p;声明一个变量时,系统会给变量p分配一个储存空间,分配完后,可以用&p查看这个变量的位置。但是,它是一个空指针,不管用*p还是**p都只会得到乱码,没有实际作用。
但是你可以使用它,比如你有定义两个变量:
int a=5,*b;
并且再给b和p赋值:
b=&a;
p=&b;
那么,你就可以用:
p得到p的值(里面存的b的地址)
*p得到b的值(里面存的a的地址)
**p得到a的值(5)
所以,你确定是要p的值吗?直接用p就可以。要想a的值,就要用**p了。
不知说明白没有,如果有什么问题请留言。
int **p;将p定义成了二级指针(指向指针的指针),要取p指向的变量(是一个一级指针)的值,可以用*p,要取p指向的一级指针指向的变量(是一个int型变量)的值可以用**p。
如:
int n=100;
int *pn=&n;
int **p=&pn;
则*p等于pn,即*p等于&n(*p等于n的地址),而**p就等于n。
一甄百合: 在c语言中 * 是指针运算符. *p表示指针变量p所指向的变量的值.即p中存储的内存地址 所存储的变量的值. 另外 容易混淆的地方是; 定义一个指针变量p时,如 int *p; 表示定义了一个指向整型变量的指针变量p. 望采纳.
开福区17892137327: C语言中int *(*p)()是什么含义?? - ?
一甄百合: 1int* (*p)(); 声明了一个指向『"接受void参数,返回int*"的函数』的指针
开福区17892137327: c语言中,int **p;的含义是?简明回答,最好有解释,谢谢 - ?
一甄百合: int **p 就是 int * (*p) 显然,*p是一个指针,编译器也得给它安排4字节的内存来存储它的值,int **p就是指向这块内存的指针,它的字面值就是这块内存的首地址
开福区17892137327: C语言指针符号问题? - ?
一甄百合: 当你想保存一个地址的时候不加 *:Int a = 0; p = &a; 当你想取指针里的值的时候加 * :int b; b = *p; ==> b = *(&a) ==> b = 0; // 就是说把a地址保存的值取出来.当*p的值还是指针的时候:int *p = NULL; int *q = NULL; int a = 0,b =1 ; q = &a; p = &q; *p= &a; // 结果就是q 指向a , p指向q; (*(*p)) 等于 0;p= &a; // 结果就是p指向a; q 也指向a; p
开福区17892137327: C语言 int *p;和printf("%d",*p);中的*p含义相同? - ?
一甄百合: 含义不同的 int *p;是声明一个指针变量p printf里面的*p是取p这个变量里的值
开福区17892137327: C语言里int *p; if(*p==null)和if(p==null)有什么区别 我不怎么理解这 - ?
一甄百合: 带*号是取值的意思,即取指向地址的值.所以if(*p == null)是判断指针p指向的地址存储的值是否为null if(p == null)是判断指针p是否指向null 希望对你有帮助.
开福区17892137327: C语言高手请指教:"int **p"是什么意思啊 - ?
一甄百合: int a; int *p = &a; int **pp = &p; 明白了吧?p 是一个普通的指针,它指向普通变量 pp 是一个指向指针的指针.
开福区17892137327: c语言中 int *p; 是管p叫指针变量,还是管*p叫指针变量? - ?
一甄百合: p叫指针变量.int *p,其实int *是一部分,p是后半部分
开福区17892137327: 在c语言中,int *p,a; *p=&a,和p=&a有什么区别? - ?
一甄百合: 这样问说明你对指针的概念还不清楚,以下两种方式等价:一、先声明指针,再给指针赋值 int *p,a; p=&a; 二、定义指针的同时给它赋值 int a,*p=&a; //这里的*p可以解释成int * p,int *表示p是指向int型变量的指针
开福区17892137327: c语言中,我定义 int **p,和*a和b,其中*p的含义是什么,我让**p指向*a,*p指向b - ?
一甄百合: p 是一个指向整型指针的指针,*p 是一个指向整型的指针, **p = *(*p)是一个整型数 a 是一个指向整型的指针,*a 是一个整型数 b 是一个整型数 所以:**p = *a 可行,但是注意不是”指向“,是将 *a这个值赋值到*p这个地址*p = b 不可行,因为*p是指针,b是整型数