在C中转换指向int的指针

时间:2012-12-05 00:20:41

标签: c arrays pointers reference casting

我有这个数组“r-> phy_addr”定义如下:

int array [r->numpgs];
r->phy_addr= &array[0];

现在我想将数组的元素0传递给一个以“int”作为arugument的函数:

add(int x){};

如果我喜欢这个

add(r->phy_addr[0]);

然后出现“无法将指针作为int传递”的错误

我该怎么做?

4 个答案:

答案 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]是一个指针。