【发布时间】:2010-08-17 16:03:11
【问题描述】:
我有以下程序。但是,我不明白为什么我必须传递数组的地址。当它们都指向同一个地址时。这是 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编译代码
【问题讨论】:
-
我试图改写你的标题,因为它没有意义。请验证我是否正确选择了您的问题的要点。
-
我觉得你的标题比我的好。谢谢。
-
你的代码 sn-p 编译得很好。你的意思是如果你将
ptr = var添加到main 中会出错吗?