为什么要使用"(数组)+ count"在foreach宏?

时间:2015-10-28 05:05:38

标签: c macros

我从here

获取了foreach宏
#define foreach(item, array) \
    for(int keep = 1, \
            count = 0,\
            size = sizeof (array) / sizeof *(array); \
        keep && count != size; \
        keep = !keep, count++) \
      for(item = (array) + count; keep; keep = !keep)

我不明白"(数组)+计数",它等于"& array [count]",但为什么不使用&# 34;阵列[COUNT]"而不是"(数组)+计数"

3 个答案:

答案 0 :(得分:4)

  

但为什么不使用" array [count]"而不是"(数组)+计数"

来自the linked post

foreach(int *v, values) {
    printf("value: %d\n", *v);
}

在宏中,item属于int*类型 array[count]的类型为int

因此你不能使用:

item = array[count];

但你可以使用

item = (array) + count;

因为(array) + count评估为int*

答案 1 :(得分:2)

array+count&array[count]count+array没有区别。

只是这些都是地址,所以你不能像以前那样将它们分配给整数值:

int item=array+count;

但是对于一个整数指针:

int* item=array+count; or int* item= &array[count];

答案 2 :(得分:1)

它们是等价的,你使用的只是程序员的语义风格。

当你将它们传递给函数时,数组会衰减为指针,指向第一个数组元素是准确的。因此,你可以使用两者。