#include <stdio.h>#include <stdlib.h>#include <string.h>void main(){ int a[3][4]; printf("%d",&a[2][2]-a[0]); getch();}答案为10,而我觉得答案应该为40,不是说指针之间的加减即指针类型长度为单位,而int型是4个字节,从a[2][2]与a[0]之间的距离为10,再*上int的字节大小4答案应该为40,为什么这里答案是10呢?
2 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
从字面上,你把这句话理解错了。
“以指针类型长度为单位”——单位是“类型的长度”:int 是 4 字节,就是以 4 字节为单位来计数。所以说,你觉得这两个元素间距是 40 字节,那么以 4 字节为单位,就会得出 10(10 个 4 字节的意思)
或者干脆记简单点:指向同个数组的指针间减法就是求所指元素的间隔个数。
onemoo
TA贡献883条经验 获得超454个赞
如果你说的是:
int a, *p = &a; p--; printf("%d\n", &a - p);
那么打印的会是 1。 这个数指的是相距几个 int,这里是 1 个 int。
这才是指针间减法,你说看到打印的是 4,那么你的 printf 打印的是哪个表达式?
“这题打印的却是减10个1而不是10个4呢?”
你的代码中指针间减法的结果就是 10 个,事实上是指 10 个 int,也就是 10 个 4 byte。
为什么你会认为是 10 个 1 呢??
- 2 回答
- 1 关注
- 1133 浏览
添加回答
举报
0/150
提交
取消