記載していただいてコードでは
charポインタを引数とするary_copy関数にintポインタを
代入しようとしている部分と
引数の型と変数名の間にスペースがないのでコンパイルエラーとなってしまいます。
あとプロトタイプ宣言の部分では仮引数名は必要ないので書かなくても構わないかと思われます。
diff
1#include <stdio.h>
2
3-void ary_copy(char*d, char*s, int t);
4+void ary_copy(int*, int*, int);
5
6-void ary_copy(char*d, char*s, int t)
7+void ary_copy(int*d, int*s, int t)
8{
9 int i;
10
11 for(i = 0; i < t; i++)
12 {
13 s[i] = d[i];
14 }
15}
16
17int main(void)
18{
19 int array1[100] = {0, 1, 2, 3, 4};
20 int array2[100];
21 int j;
22 ary_copy(array1, array2, 100);
23
24 for(j = 0; j < 5; j++)
25 {
26 printf("%d ", array2[j]);
27 }
28}
これだとt個ではなく5個限定のコードですが、どのようにすると様々な値に対応したコードになりますか。
静的配列の要素数は"配列全体のバイト数/配列一つ分のバイト数"で取得できるので
今回の場合バイト数を取得するための演算子sizeofを用いて
sizeof(array1)/sizeof(array1[0])で要素数を取得できますので
上記を踏まえればC99以降(下記SaitoAtsushiさんのコメントを参照)
がコンパイルできる処理系でしかコンパイルできませんが
下記コードのように書けばよいのではないでしょうか。
c
1#include <stdio.h>
2
3void ary_copy(const int* const d, int* const s, const unsigned t)
4{
5 for(unsigned i = 0; i < t; ++i) s[i] = d[i];
6}
7
8int main(void)
9{
10 int array1[] = {1, 2, 3, 4, 5};
11 const unsigned size = sizeof(array1)/sizeof(array1[0]);
12 int array2[size];
13
14 ary_copy(array1, array2, size);
15
16 for(unsigned j = 0; j < size; ++j) printf("%d ", array2[j]);
17
18 return 0;
19}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/08 07:35
2020/12/08 08:44
退会済みユーザー
2020/12/08 10:05 編集