C语言 有关*p=a,**q=&p;的问题
p是个指针(一级指针),把a的值赋给p所指向的地址,q是个二级指针(也就是指针的指针),q中保存这p的地址
答:*p=*q与p=q的本质区别在于:*p=*q操作的是变量存储的数值,p=q操作的是指针变量本身
C语言中,指针操作主要有以下三种情况:
*p 是指针变量p指向的变量a的存储内容,*p = 5;
p 是指针变量的存储内容,因为p指向a,所以p的存储内容(存储空间的值)就是系统为变量a分配的存储地址;
&p 是对指针变量p进行取地址的操作。
扩展资料:
指针的机制比较简单,其功能可以被集中重新实现成更抽象化的引用(reference)数据形别。
许多编程语言中都支持某种形式的指针,最著名的是C语言,但是有些编程语言对指针的运用采取比较严格的限制,如Java一般避免用指针,改为使用引用。
有两种含义,一是作为数据类型,二是作为实体。
指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。指针一般出现在比较底层的程序设计语言中,如C语言。高层的语言如Java一般避免用指针,而是引用。
指针作为数据类型,可以从一个函数类型、一个对象类型或者一个不完备类型中导出。从中导出的数据类型称之为被引用类型(referenced type)。指针类型描述了一种对象,其值为对被引用类型的实体的引用。
C++标准中规定,“指针”概念不适用于成员指针(不包含指向静态成员的指针)。C++标准规定,指针分为两类:
1、object pointer type:指向void或对象类型,表示对象在内存中的字节地址或空指针。
2、function pointer type:指代一个函数
C中函数调用是按值传递的,传入参数在子函数中只是一个初值相等的副本,无法对传入参数作任何改动。但实际编程中,经常要改动传入参数的值。
这一点我们可以用传入参数的地址而不是原参数本身,当对传入参数(地址)取(*)运算时,就可以直接在内存中修改,从而改动原想作为传入参数的参数值。
(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。显然可以用赋值语句对内存地址赋值。
参考资料来源:百度百科-指针
int *p=a,//此时p指向a[0],也就是1
**q=&p;//此时q指向p
printf("%d\n",*(p++));//这句相当于下面的两句的合并:
/*
printf("%d\n",*p);//按照p寻址并输出,此时p指向a[0],于是输出1
p=p+1;//p指针向前移动,此时p指向a[1],也就是2
*/
printf("%d\n",**q);//按照q二次寻址输出。q指向p,p指向a[1],于是输出a[1],也就是2
p是一个一维指针,它指向数组a的第一个元素a[0],
*(p++)会先取p当前指向的地址并做解引用得到a[0]元素的值,然后再将p指针移位指向相邻的下一个元素(即a[1]元素)
q是一个二维指针(可以理解为指针的指针),它指向了指针p,所以*q得到的是指针p现在指向的地址(即a[1])**q相当于*p,由于上一条语句中,p移动到了a[1]元素,所以这里得到的就是a[1]
C语言 有关*p=a,**q=&p;的问题
int *p=a,\/\/此时p指向a[0],也就是1 q=&p;\/\/此时q指向p printf("%d\\n",*(p++));\/\/这句相当于下面的两句的合并:\/ printf("%d\\n",*p);\/\/按照p寻址并输出,此时p指向a[0],于是输出1 p=p+1;\/\/p指针向前移动,此时p指向a[1],也就是2 \/ printf("%d\\n",**q);\/\/按照q...
在C语言中,*P=a,**q=&p是什么意思
p是个指针(一级指针),把a的值赋给p所指向的地址,q是个二级指针(也就是指针的指针),q中保存这p的地址
在C语言中两个**是什么意思,如char**Formula;
1 int * 表示只能存放int类型变量的地址 如 int a;int * p = &a;其中 p的数据类型是 int *类型 因为 数据类型 * 表示只能存放这种数据类型的地址 所以 例子 int a;int * p = &a;int * * q = &p;q 是int * *类型,只能存放int * 类型数据的地址 所以和二楼说的一样,只能存放...
C语言中,*P=*Q,*P=&Q,*P=Q有什么区别?
p=*q是把q指针所指向地址里存放的数值赋给p指针指向的地址,简单说就是把q指向的变量里的值赋给p指针指向的变量 P= &Q 是错的除非是在定义的时候可以。int *p=&q;p=q啥也不是。
在C语言中,*P=*Q,*P=&Q,*P=Q有什么区别?
P=*Q的意识是把p的值变为Q的值,P和Q所指向的地址不变 P=&Q,就是把P的值变为Q指向的地址,但P指向的地址不变 P=Q就是把P的值为Q指针,就是所此时P所指向的单元,保存的是指针 P的指向依旧没变
int *p=4;**q; q=&p; 中&p和p分别代表什么?**q怎么理解?
int **q;这句话声明了一个指向指针变量的指针变量,见下图,其中q是双重指针变量,p是指针变量,z就是具体数据了。访问过程请自己推一下吧(用上面的方法)。q=&p;其中&p表示求出p这个指针变量的在内存中的地址,而q=&p就表示把p的地址作为q这个双重指针变量的值。| | --- | | | ...
c语言中 指针的地址可以赋给指针么
可以, 即定义一个指向指针变量的指针变量, 如:main(){ int **p1,*p2,i;i=2;p1=&p2;p2=&i;printf("%d\\n",**p);}
在c语言中*p是什么意思 *p||*q又是什么意思 求高人指点
而 *p||*q中,你在前面的程序语言中,肯定有p=&a;q=&b;这样的语句,那么 *p||*q,指的可以等价为a||b.举个例子 include<stdio.h> void main(){ int *p,*q;int a,b,c;a=3,b=4;p=&a;q=&b;c=*p||*q; \/\/等价为c=a||b;printf("%d",c); \/\/输出结果1 } ...
c语言问题
,*p,(*q)++)中的*p,(*q)++这两个表达式,先计算(*q)++,再计算*p:(*q)++:表达式的值为2,计算后,*q再进行++处理变为3 p:由于p和q指向同一个地址,所以经过上述计算后,*p变为3 最后输出时,先输出*p的值(也就是3),再输出(*q)++的值(也就是2)所以输出的是: 3 2 ...
指针运算* p=& a正确吗?
1.一般来说*p=&a的表示方法是错的,*p=a和p=&a是正确的。2.*p=a的意思:将a的值赋给p指针指向的地址的值;3.p=&a的意思是:将a的地址赋给指针p;4.区别:*p是一个值;p是一个地址;两者完全不相同。5.*代表着p指向的地址的值,简单来说就是取值;&是取地址符号,取的是地址;p是...