我有这个结构
".headeritem"
在主代码中,我有一个".bodyitem"
。我需要将此typedef struct _cood{
int x, y;
}coordirnate;
作为指向函数coordinate foo[3][3]
的指针传递。
foo
scanCood()
函数是这样的:
void scanCood(coordinates *foo[3][3]);
void printCood(coordinates foo[3][3]);
int main(int argc, char** argv)
{
coordinate foo[3][3];
printf("WRITE YOUR NUMBERS:\n");
scanCood(&foo);
printf("PRINTING YOUR NUMBERS\n\n");
printCood(foo);
return (0);
}
使用scanCood
打印非常简单,我没有遇到任何问题,但在输入2个数字后,程序核心转储在void scanCood(coordinate *foo[3][3]){
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
scanf("%d", &foo[i][j]->x);
scanf("%d", &foo[i][j]->y);
}
}
}
上。
编译器提供了这些警告,但不会阻止编译:
我需要一些帮助,我应该如何用这个指针来实现这个功能。
答案 0 :(得分:2)
函数声明错误。
我认为你的意思是以下
void scanCood( coordinate ( *foo )[3], size_t n )
{
size_t i, j;
for (i = 0; i < n; i++ )
{
for (j = 0; j < 3; j++)
{
scanf("%d", &foo[i][j].x);
scanf("%d", &foo[i][j].y);
}
}
}
该功能可以像
一样调用scanCood( foo, 3 );
由参数声明
使用coordinate * foo[3][3]
表示类型为coordinate *
的二维指针数组,可调整为以下类型的指针
coordinate * ( *foo )[3]
如果要将指针传递给数组,则应将参数声明为
coordinate ( * foo )[3][3]
虽然没有必要以这种方式声明参数。
在这种情况下,该函数确实被称为
scanCood(&foo);
但是应该使用正确的语法重写函数体。 例如
void scanCood( coordinate ( *foo )[3][3] )
{
size_t i, j;
for (i = 0; i < n; i++ )
{
for (j = 0; j < 3; j++)
{
scanf("%d", &( *foo )[i][j].x);
scanf("%d", &( *foo )[i][j].y);
}
}
}
考虑到函数声明中存在拼写错误
void scanCood(coordinates *foo[3][3]);
^
void printCood(coordinates foo[3][3]);
^