为了账号安全,请及时绑定邮箱和手机立即绑定

关于c语言的一个问题:int a[3][4];则表达式&&a[2][2]-a[0]的值为

关于c语言的一个问题:int a[3][4];则表达式&&a[2][2]-a[0]的值为

C
福工刘德华 2018-03-31 16:28:06
#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 字节的意思)


或者干脆记简单点:指向同个数组的指针间减法就是求所指元素的间隔个数

查看完整回答
反对 回复 2018-03-31
  • 福工刘德华
    福工刘德华
    比如int a; *p=&a; p——; 然后printf打印的p是减4,而这题打印的却是减10个1而不是10个4呢?
  • onemoo
    onemoo
    写代码时我习惯格式化,所以另写了一个回答
?
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 呢??

查看完整回答
反对 回复 2018-04-01
  • 2 回答
  • 1 关注
  • 1133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信