马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 我爱橙 于 2022-6-10 16:29 编辑
Q:若有下列定义和语句,则对a数组元素的非法引用是
int a[2][3],(*pt)[3];pt=a;
A.pt[0][0] //指针变量 pt 指向 a 数组,*pt 相当于 a [0];
B.*(pt+1)[2] //*(pt + 1) 相当于 a[ 1];*(pt + 1)[2] 相当于 *(pt + 3);* (pt + 3) 等价于 a[3];显然 a[3] 不存在!所以选项 B 非法!
C.*(pt[1]+2) //
D.*(a[0]+2) //
答案是B,但为什么程序可以运行啊?
#include <stdio.h>
#include <math.h>
int main()
{
int a[2][3],(*pt)[3];
pt=a;
printf("a=%d\n",a); //a=648755
printf("pt=%d\n",pt); //pt=6487552
printf("pt[0][0]=%d\n",pt[0][0]); //pt[0][0]=0
printf("*(pt)[2]=%d\n",*(pt)[2]); //*(pt)[2]=6487552
printf("*(pt+1)[2]=%d\n",*(pt+1)[2]); //*(pt+1)[2]=0
printf("*(pt[1])=%d\n",*(pt[1])); //*(pt[1])=0
printf("*(pt[1]+2)=%d\n",*(pt[1]+2)); //*(pt[1]+2)=0
printf("*(a[0])=%d\n",*(a[0])); //*(a[0])=0
printf("*(a[0]+2)=%d\n",*(a[0]+2)); //*(a[0]+2)=64
return 0;
}
|