我有这个数组“r-> phy_addr”定义如下:
int array [r->numpgs];
r->phy_addr= &array[0];
现在我想将数组的元素0传递给一个以“int”作为arugument的函数:
add(int x){};
如果我喜欢这个
add(r->phy_addr[0]);
然后出现“无法将指针作为int传递”的错误
我该怎么做?
答案 0 :(得分:3)
如果编译器抱怨r->phy_addr[0]
指针,那么r->phy_addr
必须具有指针指针类型(int **
最有可能)。在那种情况下,你的问题甚至更早开始。此
r->phy_addr = &array[0];
已经无效,因为您要为int *
对象分配int **
值。编译器应该告诉你它。
换句话说,您对add
的调用不是问题。忘记拨打add
的电话。现在看那个电话还为时过早。你有其他问题需要在那之前解决。
什么是r->phy_addr
?它应该是int **
类型吗?如果是这样,为什么要如上所示分配它?为什么要忽略由无效赋值触发的编译器诊断消息?
答案 1 :(得分:2)
尝试add(*(r->phy_addr[0]));
它应该工作
答案 2 :(得分:1)
我怀疑r-> phy_addr有int **
类型。
因此,r->phy_addr[0]
获得int *
类型,然后
编译器警告您该参数应为int
类型,
而不是int *
类型。
将r->phy_addr
的类型更改为int *
。
感谢。
答案 3 :(得分:0)
怎么样:
add(*(r->phy_addr[0]));
?因为,显然是,r->phy_addr[0]
是一个指针。