我爱橙 发表于 2022-3-10 16:47:44

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;
      
}

我爱橙 发表于 2022-3-12 14:13:38

a 是一个数组,在 &a 这个表达式中,数组类型做左值,&a 表示取整个数组的首地址,类型是 int (*);&a 则表示数组 a 的第一个元素的首地址,虽然两个地址的数值相同,但后者的类型是 int *。
页: [1]
查看完整版本: NO.241 EX11.6 引用数组元素地址