NO.241 EX11.6 引用数组元素地址
本帖最后由 我爱橙 于 2022-6-10 15:51 编辑Q:若有定义int a,*p=a;
则对a数组元素地址的正确引用是
A.&a
B.p+2
C.a++
D.&a
运行了程序B和D结果一样,
但答案是B,
为什么不是D直接取地址啊?
A.
#include <stdio.h>
#include <math.h>
int main()
{
int a,*p=a;
&a;
printf("a=%d\n",a); //a=6487552
printf("&a=%d\n",&a); //&a=6487552
printf("a=%d\n",a); //a=0
printf("&a=%d\n",&a); //&a=6487572
printf("*p=%d\n",*p); //*p=0
printf("p=%d\n",p); //p=6487552
printf("a=%d\n",a); //a=0
printf("&a=%d\n",&a); //&a=6487552
return 0;
}
B.为什么p+2语句没有执行啊?
#include <stdio.h>
#include <math.h>
int main()
{
int a,*p=a;
printf("a=%d\n",a); //a=6487552
printf("&a=%d\n",&a); //&a=6487552
printf("a=%d\n",a); //a=0
printf("&a=%d\n",&a); //&a=6487572
printf("a=%d\n",a); //a=0
printf("&a=%d\n",&a); //&a=6487552
printf("p=%d\n",p); //p=6487552
printf("*p=%d\n",*p); //*p=0
p+2;
printf("a=%d\n",a); //a=6487552
printf("&a=%d\n",&a); //&a=6487552
printf("a=%d\n",a); //a=0
printf("&a=%d\n",&a); //&a=6487572
printf("a=%d\n",a); //a=0
printf("&a=%d\n",&a); //&a=6487552
printf("p=%d\n",p); //p=6487552
printf("*p=%d\n",*p); //*p=0
return 0;
}
C.怎么实现a++?
#include <stdio.h>
#include <math.h>
int main()
{
int a,*p=a;
a++;
printf("a=d\n",a);//
printf("*p=%d\n",*p);//
printf("p=%d\n",p);//
printf("a=%d\n",a);//
return 0;
}
7 8 a++;
lvalue required as increment operand
D.
#include <stdio.h>
#include <math.h>
int main()
{
int a,*p=a;
&a;
printf("a=%d\n",a); //a=6487552
printf("&a=%d\n",&a); //&a=6487552
printf("a=%d\n",a); //a=0
printf("&a=%d\n",&a); //&a=6487572
printf("a=%d\n",a); //a=0
printf("&a=%d\n",&a); //&a=6487552
printf("p=%d\n",p); //p=6487552
printf("*p=%d\n",*p); //*p=0
return 0;
}
a 是一个数组,在 &a 这个表达式中,数组类型做左值,&a 表示取整个数组的首地址,类型是 int (*);&a 则表示数组 a 的第一个元素的首地址,虽然两个地址的数值相同,但后者的类型是 int *。
页:
[1]