#define变量用法

时间:2013-03-27 05:11:01

标签: c preprocessor-directive

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

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

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

他们正在尝试使用arr()[1],arr()[2]等变量,

  1. arr() + 2是否等于value + 2。我尝试执行一个小程序,但这两个结果给了我不同的答案。这怎么可能。因为他们将第一个数组的地址分配给arr()。这两者应该不一样吗?
  2. 有人能解释一下如上定义变量的重要性吗?

4 个答案:

答案 0 :(得分:1)

我无法告诉你为什么他们已经完成了,但是,arr() + 2value + 2是相同的。

答案 1 :(得分:1)

此行#define arr() (&value[0])表示只要预处理器(在编译器之前运行)遇到arr(),它就会用(&value[0])替换它在文件中。

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

答案 2 :(得分:1)

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

另外

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

所以

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

我只能猜测程序员用这种方式编写,使编码与像this example

这样的区域代码的其他部分一致

答案 3 :(得分:1)

  

arr()+ 2等于值+ 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;
}