猿问

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

#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呢?

福工刘德华
浏览 1134回答 2
2回答

onemoo

从字面上,你把这句话理解错了。“以指针类型长度为单位”——单位是“类型的长度”:int 是 4 字节,就是以 4 字节为单位来计数。所以说,你觉得这两个元素间距是 40 字节,那么以 4 字节为单位,就会得出 10(10 个 4 字节的意思)或者干脆记简单点:指向同个数组的指针间减法就是求所指元素的间隔个数。

onemoo

如果你说的是: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 呢??
随时随地看视频慕课网APP
我要回答