1

我对这段代码有疑问:

主要的 :

#include <stdio.h>
#include <stdlib.h>
#include "Function.h"
int main()
{

int B[9]; 

saisie_B_M(&B[9]);

return 0;

}

函数.c

void saisie_B_M(int B[9])
{

int i;

for(i=0; i<8; i++)
{
    printf("Une cellule morte ayant %d voisins sera t-elle morte ou vivante à la génération suivante ? \n", i);
    scanf("%d", &B[i]);
        }
    }

函数.h

#ifndef Function_H_INCLUDED
#define Function_H_INCLUDED
void saisie_B_M(int B[9]);
#endif // Function_H_INCLUDED

原理很简单,它是一个 9 的数组,我只是在表格的每个单元格中返回一个值。但是最后有一个错误,我不知道为什么编译器没有显示消息。

4

3 回答 3

4

问题是当你调用你的函数时

saisie_B_M(&B[9]);

它应该是

saisie_B_M(B);

在第一种情况下,您给出一个数组,但从第 9 个 offset 开始B[9]。所以你的函数将在第 9 次然后第 10 次、第 11 次、第 12 次开始迭代......行为未定义。

于 2013-02-05T22:48:56.967 回答
4

扩展@Miguel Prz的答案,如果您想从第一个元素开始,那么您需要传递对数组中第一个元素的引用:saisie_B_M(&B[0])或者您可以只使用saisie_B_M(B).

于 2013-02-05T22:51:03.810 回答
2

C 中的数组是零索引的,因此 B[9] 的元素在 0..8 范围内。这是无效的:

saisie_B_M(&B[9]);

如果你想将指针传递给你需要使用的最后一个元素:

saisie_B_M(&B[8]);

但似乎您需要完整的数组,因此将 &B[0] (或简单的 B)传递给 saisie_B_M 函数。您的“for”循环也应更改为:

for(i=0; i<9; i++) {
/* ... */
}
于 2013-02-05T22:46:05.553 回答