我有如下程序。但是,我不明白为什么我必须传递数组的地址。当它们都指向相同的地址时。这个地址是int数组的第一个元素的地址。
当我尝试这样做时,我会收到一个警告“从不兼容的指针类型赋值”:
ptr = var;
完整的源代码:
void print_values(int (*ptr)[5])
{
size_t i = 0;
for(i = 0; i < 5; i++) {
printf("%d: [ %d ]\n", i, (*ptr)[i]);
}
}
int main(void)
{
/* declare a pointer to an array integers */
int (*ptr)[5] = NULL;
/* array of integers */
int var[] = {1, 2, 3, 4, 5};
/* assign the address of where the array is pointing to (first element) */
ptr = &var;
/* Both are pointing to the exact same address */
printf("var [ %p ]\n",(void*)var);
printf("&var [ %p ]\n", (void*)&var);
print_values(ptr);
return 0;
}
我使用 gcc 4.4.4 c89 -Wall -Wextra -O0
编译代码
ptr = var
会出现错误吗? - Ciro Santilli OurBigBook.com