我有一个函数,其中声明了一个指向结构的指针数组
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[], ...)
令牌之前的错误。
答案 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 **
的指针,它与函数参数根据其声明的预期完全对应。