我从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]"而不是"(数组)+计数"
答案 0 :(得分:4)
但为什么不使用" array [count]"而不是"(数组)+计数"
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)
它们是等价的,你使用的只是程序员的语义风格。
当你将它们传递给函数时,数组会衰减为指针,指向第一个数组元素是准确的。因此,你可以使用两者。