*p指指针则**p是什么?
**p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值!
例如:
int i=10; //定义了一个整型变量
int *p=&i; //定义了一个指针指向这个变量
int **p1=&p; //定义了一个二级指针指向p指针
那么取出10的值方式为:
printf(“i=[%d]
”,*p);
printf(“i=[%d]
”,**p1);
扩展资料:
指针与数组关系
指针数组:就是一个由指针组成的数组,那个数组的各个元素都是指针,指向某个内存地址。 char *p[10];//p是一个指针数组
数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是一个常数。
example:
char (*p)[10]//p是一个数组指针
函数指针:本身是一个指针,指向一个函数入口地址,通过该指针可调用其指向的函数,使用函数指针可实现回调函数。
参考资料来源:百度百科-指针
若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;}验证结果如下:
#include <stdio.h>
#include <malloc.h>
//一级指针做参数:带入的往往是一个普通变量的地址,可以改变实际参数的数值
void test(int *p)
{
*p=-1;
}//*p的类型是int,是指向的对象的别名
//二级指针做参数:带入的是一级指针的地址,可以改变一个一级指针变量指向的地址
void test1(int **pp)
{
printf("0x%d ",pp);
printf("0x%d ",&pp);
printf("0x%d ",*pp);
printf("%d ",**pp);
**pp=100;
printf("0x%d
",&(**pp));
*pp=(int*)malloc(sizeof(int)*100);
}
int main(int argc, char* argv[])
{
int n=10;
int *p=&n;
printf("0x%d ",&n);
printf("%d ",*p);
printf("0x%d ",p);
printf("0x%d
",&p);
int **pp=&p;//pp的来源类型是int类型,自己是int**的类型(对一级指针变量取地址得出的就是二级指针或者二级地址)
test(&n);
test1(&p);
printf("%d
",n);
free(p);
return 0;
}
运行结果:
int n=10;int *p=&n;// p等于n的地址 *p可以操控n的数值(此时的*p等于n的数值)
int **pp=&p;// pp等于p的地址 *pp等于p指向的地址(即n的地址) **pp可以操控n的数值(此时的**p等于n的数值也等于*p的值)
*p表示指针所指向的内存单元。
如:
int b = 10;
int *p = &b;
那么 b 和 *p 都代表 b。
**p准确的名字是:指向指针的指针
**p一般只会在定义变量的时候出现。
如:char **p;
即定义一个指向指针的指针。
可以看作是char *(*p);
或者是char *p;long *q; q=&p;
一般不这样写,真如此,应该指指针*P所指向的地址中的元素
二维指针,也叫指向指针的指针,这个跟一级指针没有本质区别
如果你说的是(*p)的值是个指针的话,(**p)就是将(*p)解引用,也就是(*p)地址上的值。
你的问题没有说清楚
一个指针p有*代表什么意思*p代表的是地址吗
看你怎么定义变量的,如果定义的时候是*p,那么p就是一个地址,*表示指针,*p表示指针指向p存储地址中所对应的具体值(即:具体值),☆【如:int *p = 1;那么p所对应的地址内存中存放的值就是1,代码中的*p表示1,p表示1所在的存储地址】。&符号表示获取对应值的存储地址(并不是具体值,而是...
如何理解指针p=*(p)?
A的说法,就是p本质上是个数组,只不过数组中的每个元素都是指针 B的说法,就是p本质上是个指针,指针指向一个一维的数组 这种题的话,其实可以先根据运算符的优先级、结合性,先确定标识符本质上是一个什么,然后再去补充 例如,int *p[3],先根据优先级,等效于*(p[3]),所以p本质上是一个...
c语言的指针部分*p与p的区别是什么?
p是指针变量,其值是一个变量的地址。p收到了哪个变量的地址,就指向哪个变量。该变量成为p的对象。p是p所指向的对象的值。例如:inti=3,*p;p=&i;注意:p收到i的地址,故p指向i,i是p的对象。printf("%d,%d\\n",i,*p);输出:3,3注意:*p是p所指向的对象的值,即i的值。C语言 C语言是一...
C语言指针,如果p=&k,则p是指针变量,那么*p也可以看做指针变量?形参为啥...
--- 形参 书写 是用 声明的形式,例如:void add(int a, int b, int *p);形参 int *p -- 用的是 声明的形式,p 是指针。--- 声明为 int *p; \/\/ p 是 指针 变量 语句中 *p 是 指针指向的值,p 是 地址。k = 20;p = &k; \/\/ 地址 printf("%d\\n", *p); ...
C语言中*p和**p有何区别
例如int *p1,**p2;两者本质上都是指针,但是两者的基类型不同。p1的基类型是int,换句话说p1指针指向的是int型的数据,而p2的基类型是int *换句话说p2指向的是指向int型数据的指针,即指向指针的指针。三、用法不同 例如int *p;那么p就是指向int类型变量的一个指针。(即数组)如果int**p;那么...
*p和p的区别c语言
c语言*p和p的区别是:指针符不同:用法不同、运算符不同、变量不同、类型不同。1、指针符不同:通常用于解引用指针,即获取指针所指向的存储单元的值,而p只是一个指针变量的名称,用于存储指针的地址。2、用法不同:以便更改或访问存储在指向的存储单元中的值,但是p只是指针变量,不能执行此操作。
c语言,设p为一个指针,*p=x与p=&x有什么区别?
p为一个指针的话,*p=x是给已经指向可用空间的变量赋值用的,它必须先让指针p指向一个可用的存储空间,然后这个语句就把x中存储的值复制到p所指向的那个空间。而p=&x;就是让p指向一个可用的存储空间的语句(p指向变量x)。比方说:int x=12,y,*p;p=&x;p=x*x; \/\/---这个语句的作...
①*&x的结果是x ②如果p是指针变量,&*p的结果是p 这两句话能具体讲讲...
&和*是一对反向操作。&是取地址。 * 是取这个地址上的值。所以 &x 是x的地址, *再取这个地址的值。 于是 *&x=x p是指针, 那么*p是取值, &再取地址。 &*p还是p。之所以说必须p是指针变量, 是因为如果不是地址, 那么*p是非法的。
p,*p,(*p),*(*p) ,这些都表示什么意思?有什么区别,&p,(&p),&(&p),
p:普通变量名。p的含义:p是一个指针型变量,它存放一个变量的地址。(*p):与*p相同。(*p)::p是一个指针型变量,它存放一个地址,在这个地址中存放着变量的地址。通常,我们把p称为“指向指针的指针”。&p:变量p的地址。(*p):=&p。&(&p):无意义。
C语言 *p 和p的区别?
C语言中,*p 和p都常用在指针当中表示一个指针变量,*p 和p的区别:1、表示的含义不同 p表示此指针指向的内存地址中存放的内容。p表示一个指针变量的名字,指此指针变量所指向的内存地址。2、输出的格式不同 p一般是一个和指针类型一致的变量或者常量。p输出的是一个16进制数, 输出一个指针的地址...
常宜生脉: *p 就是取出 指针p所指地址的位置所存的内容比如 char s = 'a'; char *p = &s;*p 就是 'a' 就是十进制的97
巴音郭楞蒙古自治州13398332445: **p 什么意思 c++ - ?
常宜生脉: *p表示p是指向存储空间的指针.*p的值是它所指向的存储空间的值.例如复制:int*p,a;定义p是一个指向整型变量的指针.P = & a;//p是a的地址,所以p指向a.=5;//a等于5,所以a等于*p,所以a等于5,所以*p等于5.Printf("%d",*...
巴音郭楞蒙古自治州13398332445: C语言中**p是什么意思 - ?
常宜生脉: int a=10; int *b;//指针 int **p;//指向指针的指针 b=&a; p=&b; (**p)相当于a;
巴音郭楞蒙古自治州13398332445: 若定义一个二级指针**p,那么*p是什么意思,请举一个例子,谢谢! - ?
常宜生脉: *p相当于一个数组P[],**p相当于指针数组*p[]!.................................
巴音郭楞蒙古自治州13398332445: 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]这个元素的值
巴音郭楞蒙古自治州13398332445: **p 什么意思 *p我知道是指针 - ?
常宜生脉: 指针的指针 指向指针的指针定义方法 ,例如int **i; 定义了一个指针变量i,他指向另一个指针变量(该指针变量又指向一个整型变量),是一个2级指针,由于指针运算符*是按自右向左顺序结合,因此上述定义相当于:int *(*i); (*i)是指针变量形式,它外面的*表示i指向的又是一个指针变量,int表示后一个指针变量指向的是指针变量
巴音郭楞蒙古自治州13398332445: 若有定义:int **p;则p是一个什么变量 - ?
常宜生脉: p是指针变量.int *******p; 不管你写多少个 * 号 p 都是指针变量 这个变量存储的数据是 一个内存的地址
巴音郭楞蒙古自治州13398332445: C语言中,指针变量*p与**p有什么区别??
常宜生脉: *p和**p都是指针,**p是*p的地址 .
巴音郭楞蒙古自治州13398332445: *p和**p的区别 - ?
常宜生脉: *p和**p的区别: 一、指针级别不同 *p是一级指针. **p是二级指针. 二、表示的含义不同 *p表示p所指向的地址里面存放的是一个int类型的值 . **p表示p所指向的地址里面存放的是一个指向int类型的指针. 三、指向的内容不同 *p=a指针p将...
巴音郭楞蒙古自治州13398332445: c语言中**p是什么意思啊?
常宜生脉: 是指向指针的指针.假设定义一个int *a,**p;那么**p就可以代表a的地址.