【发布时间】:2016-11-08 01:47:45
【问题描述】:
指针和 C 的新手,我的程序需要一个指向结构数组的指针,并且能够将此指针传递给函数。
声明结构数组类型指针的正确方法是什么,我的函数参数应该是什么?
这是我的尝试:
#define HAND_SIZE 5
struct Card {
char suit;
char face;
};
void printHandResults(struct Card *hand[HAND_SIZE]);
int main(void)
{
struct Card hand[HAND_SIZE];
struct Card (*handPtr)[HAND_SIZE]; //Correct way to declare?
handPtr = &hand;
...
printHandResults(handPtr);
}
void printHandResults(struct Card *hand[HAND_SIZE]) {
...
}
这是我得到的警告:
warning: incompatible pointer types passing 'struct Card (*)[5]' to parameter of type 'struct Card **' [-Wincompatible-pointer-types]
我知道指针是不同的类型,但我似乎无法弄清楚如何正确设置它。
如果有人能*指出我正确的方向,我将不胜感激。
【问题讨论】:
-
数组在传递给函数时会自动成为指针,您不需要为此单独使用变量。
-
struct Card *hand[HAND_SIZE]是一个指针数组,而不是指向数组的指针。 -
handPtr 在你的方式是指针数组。为什么不直接将 &hand 传递给 printHandResults?
-
为什么要一个指向数组的指针?数组通常使用指向元素类型的指针来操作,而不是整个数组。这并不是说数组指针永远没有用处,而是元素指针更为常见。
-
@KeithThompson - 他可能需要更改被调用者中的数组。