将指向结构的数组传递给函数

时间:2016-03-30 08:44:29

标签: c arrays pointers struct

我有一个函数,其中声明了一个指向结构的指针数组

void functionA(argument1, argument2) {
   ...
   struct1 *point[2];
   ...

   functionB(*point, ...) // Call the function ?
}

// Declare the function ?
void functionB(struct1 *point[], ...) {


}

我需要将此数组*point[2]传递给另一个函数,例如functionB,我需要根据point[0]point[1]进行一些操作,这是正确的方法吗? / p>

当我在functionB functionA中调用functionB(*point, ...)时,我会收到不兼容的指针类型的错误,而当我调用它时{ {1}}我收到{strong>预期表达式functionB(*point[], ...)令牌之前的错误。

4 个答案:

答案 0 :(得分:2)

您的函数调用错误。 functionB期望其类型为struct1 **的参数,但您传递的类型为struct1 *。函数调用应该是

functionB(point, ...);  

你应该知道,根据C规则,当一个数组传递给一个函数时,数组会衰减指向它的第一个元素。函数调用中的point将衰减,并且在衰减后将具有类型struct1 **

答案 1 :(得分:-2)

这是一种方法:

IEnumerable<List<CartItem>>

答案 2 :(得分:-2)

当您需要将数组发送到函数时,您只需将该数组的基址(即名称)发送到该函数,然后使用指向该类型的指针接收它。此规则适用于每种数据类型,无论是int还是struct

所以,你可以做到

void functionA(argument1, argument2) {
   ...
   struct1 *point[2];
   ...

   functionB(point, ...) // Sending base address of array point
}

// Recieve it this way
void functionB(struct1 *point[], ...) {

// Or
void functionB(struct1 **point, ...) {

答案 3 :(得分:-2)

函数functionB被声明为具有类型struct1 *point[]

的第一个参数
void functionB(struct1 *point[], ...) {


}

数组point具有相同类型的元素。

所以你只需要使用数组的名称作为函数调用的参数

functionB(point, ...) // Call the function ?

考虑到声明为数组的参数是辅助指向其元素的指针。

因此这个函数声明

void functionB(struct1 *point[], ...);

void functionB(struct1 **point, ...);

是等效的,并声明相同的一个函数。

另一方面,表达式中使用的数组指示符将转换为指向其第一个元素的指针。因此,用作参数的表达式point将转换为类型struct1 **的指针,它与函数参数根据其声明的预期完全对应。