我对此代码有疑问:
主要:
#include <stdio.h>
#include <stdlib.h>
#include "Function.h"
int main()
{
int B[9];
saisie_B_M(&B[9]);
return 0;
}
Function.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]);
}
}
function.h
#ifndef Function_H_INCLUDED
#define Function_H_INCLUDED
void saisie_B_M(int B[9]);
#endif // Function_H_INCLUDED
原理很简单,它是一个9的数组,我只是在表的每个单元格中返回一个值。但最后有一个错误,我不知道编译器为什么不显示消息。
答案 0 :(得分:4)
问题是当您使用
调用函数时saisie_B_M(和B [9]);
应该是
saisie_B_M(B);
在第一种情况下,您给出一个数组但从第9个偏移量B[9]
开始。所以你的函数将在9日开始迭代,然后是10日,11日,12日...行为未定义。
答案 1 :(得分:4)
扩展@Miguel Prz
的答案,如果你想从第一个元素开始,那么你需要传递对数组中第一个元素的引用:saisie_B_M(&B[0])
或者你可以使用{ {1}}。
答案 2 :(得分:1)
C中的数组是零索引的,因此B [9]具有0..8范围内的元素。这是无效的:
saisie_B_M(&B[9]);
如果你想将指针传递给你需要使用的最后一个元素:
saisie_B_M(&B[8]);
但似乎你需要完整的数组,所以将&amp; B [0](或简称B)传递给saisie_B_M函数。你的“for”循环也应改为:
for(i=0; i<9; i++) {
/* ... */
}