|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码 |
|