gpt4 book ai didi

c - "error array type has incomplete element type"二维数组

转载 作者:行者123 更新时间:2023-12-02 06:58:21 25 4
gpt4 key购买 nike

从今天早上开始,我一直在尝试寻找如何编辑二维数组中的特定单元格,但我一直在努力让我的代码更简洁(想要制作函数并让它们协同工作)。

这当然不是我的整个程序,而是其中的一部分(当然是经过简化的)。

当我尝试编译时,在“char *TableauAfficher[][]”上出现以下错误:

“错误数组类型有不完整的元素类型”

#include <stdio.h>
#include <stdlib.h>

void AffTableau(int *i, int *j, char *TableauAfficher[][], int *LongLargMap) //ERROR
{
for (i=0; i<LongLargMap; i++) {
for(j=0; j<LongLargMap; j++) {
printf("Tableau[%d][%d] = %c\n", i, j, TableauAfficher[i][j]);
}
printf("\n");
}

int main()
{
int i, j;
int LongLargMap = 5;

char SaisieDirection;
int SaisieNombre;

char TableauAfficher[5][5];

int *Pointeuri = &i;
int *Pointeurj = &j;
int *PointeurLongLargMap = &LongLargMap;
char *PointeurTableauAfficher = &TableauAfficher;

TableauAfficher [0][0] = 'V';
TableauAfficher [0][1] = 'V';
TableauAfficher [0][2] = 'A';
TableauAfficher [0][3] = 'V';
TableauAfficher [0][4] = 'V';

TableauAfficher [1][0] = 'V';
TableauAfficher [1][1] = 'V';
TableauAfficher [1][2] = 'A';
TableauAfficher [1][3] = 'V';
TableauAfficher [1][4] = 'V';

AffTableau(Pointeuri, Pointeurj, PointeurTableauAfficher, PointeurLongLargMap);
}

最佳答案

表达类型

&TableauAfficher

char ( * )[5][5]

当您尝试将此表达式分配给类型为 char *

的指针时
char *PointeurTableauAfficher = &TableauAfficher;

而函数中对应的参数定义为

char *TableauAfficher[][]

编译器需要知道最右边的大小值。如果没有此信息,数组 TableauAfficher 的元素类型是不完整的。

是否必须定义参数为

char TableauAfficher[][5]

或作为

char ( *TableauAfficher )[5][5]

取决于您将如何在函数中使用它。

另一种方法是使用可变长度数组(如果您的编译器支持 VLA)这是一个演示程序

#include <stdio.h>

void AffTableau( size_t n, char TableauAfficher[][n] )
{
for ( size_t i = 0; i < n; i++ )
{
for ( size_t j = 0; j < n; j++ )
{
printf( "Tableau[%zu][%zu] = %c\n", i, j, TableauAfficher[i][j] );
}
printf("\n");
}
}

int main(void)
{
char TableauAfficher[5][5] = { { '\0' } };

TableauAfficher [0][0] = 'V';
TableauAfficher [0][1] = 'V';
TableauAfficher [0][2] = 'A';
TableauAfficher [0][3] = 'V';
TableauAfficher [0][4] = 'V';

TableauAfficher [1][0] = 'V';
TableauAfficher [1][1] = 'V';
TableauAfficher [1][2] = 'A';
TableauAfficher [1][3] = 'V';
TableauAfficher [1][4] = 'V';

AffTableau( 5, TableauAfficher );

return 0;
}

输出是

Tableau[0][0] = V
Tableau[0][1] = V
Tableau[0][2] = A
Tableau[0][3] = V
Tableau[0][4] = V

Tableau[1][0] = V
Tableau[1][1] = V
Tableau[1][2] = A
Tableau[1][3] = V
Tableau[1][4] = V

Tableau[2][0] =
Tableau[2][1] =
Tableau[2][2] =
Tableau[2][3] =
Tableau[2][4] =

Tableau[3][0] =
Tableau[3][1] =
Tableau[3][2] =
Tableau[3][3] =
Tableau[3][4] =

Tableau[4][0] =
Tableau[4][1] =
Tableau[4][2] =
Tableau[4][3] =
Tableau[4][4] =

此外,我认为声明函数参数 int *iint *j

没有任何意义

关于c - "error array type has incomplete element type"二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26670844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com