7.设有定义:int n,*p=&n: 则p表示 ,*p表示 .
来源:学生作业帮助网 编辑:作业帮 时间:2024/09/21 16:22:32
(*p)[2]=a表示将p定义为一个指向含2个元素的一维数组的指针变量,那么二维数组就可以看作是一维数组a[3],其中每一个元素都是一个一维数组,a[1]={1,2},a[2]={3,4},a[3]=
**(p+2),*p[2]这两个表达式是等价的,当然,**(p+2)=*p[2]是一个赋值表达式,最终的值还是a[2][0],即5
a+=b等同与a=a+b,这样a=30,b=20a-=b等同与a=a-b,这样a=-10,b=20a*=b等同与a=a*b,这样a=200,b=20a/=b等同与a=a/b,这样a=0,b=20(因为
选B因为&a是一个指向数组的指针,而p是一个指向整型的指针,二者不是同一个概念.
int(*p)[2]//定义指向一维数组的指针;p=a//将首行的地址赋给p.此时,*p的值为二维数组a的首行的地址,**p即为首行第一个元素的值,即1;p++//此时p指向二维数组a的第二行,*p的
结果是20啊*p就等于a啊我用程序给你测试了voidmain(){inta,*p;a=10;p=&a;printf("%d\n",a+*p);}
选c,p[0]指向a[1],也就是&a[1][0],二维数组在内存中的存储方式和一维数组一样也是顺序存放的,所以p[0]+1就是a[1][0]的下一个元素
答案是Dn,p,q这三者的关系如图所示.A错.p是指针,它里面存放的是地址值,而1是整数,类型不符,不能赋值.B错.q是指向指针的指针,*q相当于写成p一样.错误情况参考A的解释C错.p是指向整型变量
n是整数,p是整数指针,q是双重指针.A:p=1属于将地址1赋给p,非法.B:*q=2这里*q相当于一个整数指针,问题同上,非法.C:q=p相当于把p的地址赋给q,不能说错,但是不同维数的指针互相赋值
D.解释:A:因为P是指针,只能赋指针值或者NULL(也即0,就是空指针)给它.其他的都是错误的.这里复制5给它,所以错了.B:因为q是指针的指针(二级指针),只能赋给它一级指针的地址或者NULL.这
一步步分析:*p=&n;为定义指针p,同时指向n的地址;m=*p;为对m重新赋值,此时*p为对地址&n取值,即n的值5,所以m值变为5;但此语句不是指向操作,本质上说可以是int=int操作,所以p的
整形数组名同时也是该数组在内存中的首个元素的地址,所以*p=x;的意思是:*p;//定义一个指针,p=x;//将数组的首元素的地址给p就是说*p就是数组的第一个元素5,所以*p+6中,指针的运算高于加
*p=x是定义了一个int型的指针p,并给这个指针赋值为x(x为一个数组,实际上也可以看做int的指针)p++就是取出p的当前值,然后把指针指向下一个元素,p+i就是取出指向第i+1个元素的指针.所以
B.*p=*(a+2)=a[2]=2
使用了逗号操作符,实际上等于:intn=0;int*p=&n;int*q;所以,n是整型,p,q是整型指针.a错了,c也错了,*p是解引用操作,得到的是p所指向的内存区域的值.它不能作为一个“左值”(
答案是Dp=&n之后,指针p指向n然后m=*p,就是把指针p指向的数(在这里就是n了)赋值给m,所以与m=n等价
答案选Bp = a;让a指向int a[2][2]的int a[][2];p++让p指向int[][2]的第二个地址,int a[1][2]的地址,所
是错的;这对新手应该是个很隐蔽的错误,这里定义了inta[10];那么这里指针a是个常量,不能用于自加也就是说a的值时不能改变的,不能像a++这样