int a=5, *p, *q=&a;这个语句定义了 a 为整型变量,p 和 q 是整型指针,a 存储了5,q存储了a的地址;p=q*这个有错,首先p没有初始化就开始用了,我们不清楚p指向了内存中哪个位置,这是非常危险的,其次,q*应该为*p,用来取a=5这个值。* 运算符作为单目运算时在变量前。
? 1 结果是:8 2 分析 int a[]={1,3,5,7}; int *p[3]={a+2,a+1,a};有语法错,已改正! int **q=p; printf("%d\n",*(p[0]+1)+ **(q+2)); p[0]指向a[2],p[0]+1指向a[3]=7,q指向p[0],q+2指向p[2],p[2]指向a[0]=1,因此7+1=8。{int...
和*(p++)意思一样;在(*p)++中,由于()的优先级比*和++都高,所以++作用在()内的表达式*p上。比如有:int x,y,a[]={1,2,3,4,5},*p=a,*q=a;x=*p++;//执行这一句后x=a[0]=1,p=a+1 y=(*q)++;//执行这一句后,y=a[0]+1=2,q仍然=a ...
n2=n1 是将n1的值赋值给n2,与变量地址无关,因此去除所有对指针操作不带*的选项 B D C.*p=&n1;是将n1的地址值赋值给p,即p指向n1,与n2无关。 &是取变量地址操作符 A.*p=*q; 正确,通过n1的地址q,提取数据n1的值,赋值给由p所指向的n2的地址 指针变量中存的是地址值,通过地址...
这个&不能去掉,这里的a[3]相当于你定义了一个指针变量q,用 *q 取q指向内存的值。a[3]是一个整型数值(4字节,不考虑特殊),p是指针变量(1字节)。你可以用强制转换,但运行是通不过的。看代码吧(希望对你有帮助)include <stdio.h> void main(){ int a[4] = {1, 2, 3, 4};int ...
这里给它的是常量,所以这里也错了。 C:跟B差不多(给的是p,而p=&n,就是说给q的是n的地址,n是变量地址,不是一级指针地址),所以也错了。 D:p是一级指针,保存变量的地址,*是解引用操作,对p解引用之后就等同于其所保存的变量所以(*p=5,在解引用之后可以看成是n=5,因为p=&n,...
在指针里,代表着指针的等级(一个*是一级指针,2个以上也就是常说的多级指针,比如二级指针**p,三级指针***q等等),**p代表p所指向的对象是个指针(比如*w),所存储的w的地址,而不是指向一个底层变量(a=10)w = &a;p = &w;p ==a(解引用a的值)p == w(解引用w的值,即w所...
我同意你的看法。不能对q赋值为p的值,它们的类型是不一致的,一个是int *,另一个是int 后面不应该问*q的值,我们顶多说*q的值就是p变量的首地址。
2.若有代码int a=10,*p;p=&a;当执行了上面的代码,会说”p指向了a”,其实就是p指针变量存放了a的地址”3.两个*的区别,有如下代码:inta=10,*p;//该处的* 说明p是一个指针变量用来存放地址p=&a;p=*p+1;//该处的* 表示p所指的变量中的值即a的值10 总结: 变量定义时的* 说明该...
cout << a << endl; // 这时输出的是局部变量a return 0;} 当他作为二元作用域分辨运算符时,主要是用于在源文件中绑定类的成员函数,如:a.h class a { public:void fun1();int fun2();private:int x;};a.cpp include "a.h"void a::fun1(){ ...} int a::fun2(){ ...} ...