2

我正在做一个用 C 编程语言编写的项目。我有一个代码片段如下

unsigned char value[10];
#define arr() (&value[0])

为什么他们为 unsigned char 数组定义了一种“函数”( arr())类型的'd 变量?#define

他们正在尝试使用诸如arr()[1],arr()[2]等之类的变量,

  1. arr() + 2等于value + 2。_ 我尝试执行一个小程序,但这两个结果给了我不同的答案。这怎么可能。因为他们将第一个数组的地址分配给arr(). 这两个不应该是一样的吗?

谁能解释定义上述变量的意义是什么?

4

4 回答 4

1

arr()[i]==> (&value[0])[i]==>value[i]

arr() + i ==> (&value[0]) + i ==>value + i

所以

arr() + 2 ==> (&value[0]) + 2 ==>value + 2

我只能猜测程序员编写这种方式是为了使编码与 hist 代码的其他部分保持一致,例如这个例子

于 2013-03-27T05:18:45.540 回答
1

我不能告诉你他们为什么这样做,但是是的,arr() + 2而且value + 2是一回事。

于 2013-03-27T05:16:33.623 回答
1

这一行#define arr() (&value[0])意味着每当预处理器(在编译器之前运行)遇到arr()它时,它会在文件中将其替换为(&value[0]).

所以arr()[1]意思(&value[0])[1]value[0]是存储在第一个值索引处的&内容,再次获取它的地址......这与值相同。所以它应该只是value[1]整体的,除非我遗漏了什么。

于 2013-03-27T05:18:08.050 回答
1

arr() + 2 是否等于 value + 2。我尝试执行一个小程序,但这两个结果给了我不同的答案。这怎么可能。因为他们将第一个数组的地址分配给 arr()。这两个不应该是一样的吗?

是的,它们是一样的。

试试这个程序

#include <stdio.h>

#define arr() (&value[0])

int main(void)
{

unsigned char value[11] = "0123456789";
printf("arr()[2] = %c\n",  arr()[2] );
printf("arr()+ 2 = %c\n",*(arr() + 2) );
printf("value+ 2 = %c\n",*(value + 2) );

return 0;
}
于 2013-03-27T05:32:32.517 回答