私は関数から配列を返すことができないという事実を回避できるように、私の配列を参照渡ししようとしています。私は、私が正しく見た事例に従っていると信じています。しかし、何がうまくいかない?出力が0〜9の数字になると期待していますが、むしろ奇妙なものがあります。Cでの参照で配列を渡す
現在のところ私のプログラムは何を言っているのか分からない。これは現在のところ、参照渡しのみをテストしている計算はしていません。私は計算を試みる前に配列を操作する方法を知っていることを確認したい。
私がやろうとしていること:0-9の数字の配列を作成し、関数に参照渡しして関数内の各要素を出力します。
実際のプログラムでは空の配列が作成され、それを関数に送信すると、関数は素数で配列を埋めます。
#include <stdio.h>
void primesUpTo(int max,int *resPt);
void main()
{
const int MAX = 10;
int primes[MAX];
/*TEST*/for(int i = 0; i < MAX;primes[i] = ++i)
primesUpTo(MAX,&primes);
}
/* Primes up to function
* Fills array that *resPt points to with primes from 0 to 'max'
* *resPt: pointer to first element of result array
* max: int, highest prime number in result array
*
* *resPt must be passed as reference
*/
void primesUpTo(int max, int *resPt)
{
/*TEST*/for(int i = 0; i < max; i++)
printf("\nTEST: %d",*(resPt + i));
}
マイコンパイルエラーと、出力:
[email protected]:~/C_Programs/CIS/hw_2/ex_3$ gcc -o test printPrimes.c
printPrimes.c: In function ‘main’:
printPrimes.c:11:17: warning: passing argument 2 of ‘primesUpTo’ from incompatible pointer type [-Wincompatible-pointer-types]
primesUpTo(MAX,&primes);
^
printPrimes.c:3:6: note: expected ‘int *’ but argument is of type ‘int (*)[(sizetype)MAX]’
void primesUpTo(int max,int *resPt);
^
[email protected]:~/C_Programs/CIS/hw_2/ex_3$ ./test
TEST: 1835627636
TEST: 1600061541
TEST: 1869833334
TEST: 1952802655
TEST: 0
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 1869833334
TEST: 1952802655
TEST: 0
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 1952802655
TEST: 0
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 0
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 6
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 6
TEST: 7
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 6
TEST: 7
TEST: 8
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 6
TEST: 7
TEST: 8
TEST: 9
読むポインタへの変換配列について。 – haccks
&primesを渡さず、代わりに単なる "素数"を渡します。 – TheGreatContini
';'が必要です。 'for(int i = 0; i
Franck