gpt4 book ai didi

c - 将二维数组传递给 C 中的函数

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:01 25 4
gpt4 key购买 nike

请注意,我使用的是 C 而不是 C++。我正在开发一个程序,该程序将采用二维数组并计算子数组中非空格的数量。例如 lines[0][i] <-- 遍历 line[0][0] - line[0][n]。但是,我很难获得接受二维数组的函数。

这是我的代码:

pScore[0]=letters(pLines, 0);

这是实际的功能。 pScore[] 是另一个数组,但是是一维数组。 pLines 是一个 4 x 200 二维数组。

 int letters(char line[][], int row)
{
int i = 0;
int n = n;
int results = 0;

for( i = 0; i < (sizeof(line)/sizeof(line[0])); i++ )
{
if( !isspace(line[row][i]) )
results++;
}

return results;
}

当我这样做时,它给我“1 号形式参数不完整”。如果我从中删除第二个 [],代码会运行但会给出非空格字符的数量。

最佳答案

根据上面的评论和您的函数参数列表:

int letters(char line[][], int row)

您违反了将二维数组传递给函数的主要租户。具体来说,您必须始终提供数组中包含的 数。例如

int letters(char line[][5], int row)

char line[][5] 是一个合适的参数。但是,无论何时将数组作为函数参数传递,第一级间接 都会转换为指针。 (你通常会在这里将其称为“指针衰减”,尽管这有点用词不当)。因此,一个明确的声明是:

int letters(char (*line)[5], int row)

line 转换后,是 5-int指向数组的指针。虽然您可以将数组作为 line[][5] 传递,但它的信息量不如 (*line)[5]。如果您有任何问题,请告诉我。


数字而不是字符

如果不查看代码的其余部分,很难判断发生了什么。但是,我怀疑您混淆了数组内容的数值ASCII 字符值。 (例如 character '0' = decimal 48 (0x30 (hex), '1' = 49'a' = 97 等)。参见 ASCIItable.com

关于c - 将二维数组传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35811815/

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