对于二维数组声明“int a[i][j];” (i、j均为常量)且有0≤m<i,0≤n<j ,下列
对于二维数组声明“inta[i][j];”(i、j均为常量)且有0≤m<i,0≤n<j,下列选两个表达式的值相等的是(6)。A.a+m与a[0]+mB.a+m与*(a+m...
对于二维数组声明“int a[i][j];” (i、j均为常量)且有0≤m<i,0≤n<j ,下列选两个表达式的值相等的是 (6) 。
A. a+m 与 a[0]+m B. a+m 与 *(a+m)
C. *(a+m) 与 *a[m] D. *a 与 *a[0].
这道题是考指针的位置公式吗,应该怎么解啊? 展开
A. a+m 与 a[0]+m B. a+m 与 *(a+m)
C. *(a+m) 与 *a[m] D. *a 与 *a[0].
这道题是考指针的位置公式吗,应该怎么解啊? 展开
1个回答
展开全部
答案选 B
原因:
c 语言,表达式中 方括号 是 运算符。
记住 c 语言中 有 恒等式: a[b] == b[a] == *(a+b)
(只有数学意义,没有物理意义,所以只好死记)
B 中,
a+m 是地址, a+m, 它等于 a[m] 并且 等于 &a[m][0]
我们选用a[m]来推理: a+m == a[m]
套用 恒等式 公式, a[m] == m[a] == *(a+m)
于是: a+m == *(a+m)
------
用程序,打印出来看:
#include<stdio.h>
int main(){
int a[4][5];
int m=2;
printf("%p %p %p %p %p\n",a+m, a[m], m[a], *(a+m), &a[m][0]);
return 0;
}
输出的5个地址值一样。
原因:
c 语言,表达式中 方括号 是 运算符。
记住 c 语言中 有 恒等式: a[b] == b[a] == *(a+b)
(只有数学意义,没有物理意义,所以只好死记)
B 中,
a+m 是地址, a+m, 它等于 a[m] 并且 等于 &a[m][0]
我们选用a[m]来推理: a+m == a[m]
套用 恒等式 公式, a[m] == m[a] == *(a+m)
于是: a+m == *(a+m)
------
用程序,打印出来看:
#include<stdio.h>
int main(){
int a[4][5];
int m=2;
printf("%p %p %p %p %p\n",a+m, a[m], m[a], *(a+m), &a[m][0]);
return 0;
}
输出的5个地址值一样。
追问
谢谢。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询