我有以下程序。但是,我不明白为什么我必须传递数组的地址。当他们都指向同一个地址时。这是int数组的第一个元素的地址。为什么我不能直接在C中将指针分配给指针?
我得到一个警告,当我尝试做这个 “不兼容的指针类型赋值”:
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
我试图重写你的标题,因为它没有意义。请确认我是否正确选择了问题的要点。 – 2010-08-17 16:40:09
我觉得你的标题听起来比我的好。谢谢。 – ant2009 2010-08-18 02:06:52
你的代码片段编译得很好。你的意思是如果你将'ptr = var'添加到main中,你会得到一个错误? – 2015-07-21 14:56:58