fork download
  1. #include <stdio.h>
  2.  
  3. // 課題で定義が求められている関数
  4. // data2の要素をdata1の既存の要素の後ろにコピーする。
  5. void cat_data(int *data1, const int *data2, int len2) {
  6. // data1の初期要素数(この例では2)は既知であると仮定し、
  7. // data2の要素をdata1[2]以降にコピーしていく。
  8. // 一般的な配列結合では、data1の現在の有効な長さも引数として渡すことが多いが、
  9. // この課題の例の図から、data1の初期要素数(1, 2)は2であると判断する。
  10. int data1_initial_length = 2; // data1の初期要素数(1と2が既に入っている部分)
  11.  
  12. // data2の要素をdata1の末尾から順番にコピーする
  13. for (int i = 0; i < len2; i++) {
  14. // data1のコピー開始位置は data1_initial_length (つまり data1[2])
  15. data1[data1_initial_length + i] = data2[i];
  16. }
  17. }
  18.  
  19. int main(void) {
  20. // 1. 配列の初期化
  21. // data1[7] の初期値は図から 1, 2。残りは未初期化。
  22. int data1[7] = {1, 2};
  23.  
  24. // data2[5] の初期値は図から 3, 4, 5, 6, 7。
  25. const int data2[5] = {3, 4, 5, 6, 7};
  26.  
  27. // 2. len2 の計算
  28. // sizeof演算子を使ってdata2の長さ(要素数)を求める。
  29. // sizeof(data2) は配列全体のバイト数
  30. // sizeof(data2[0]) はint型(1要素)のバイト数
  31. // 全体のバイト数 / 1要素のバイト数 = 要素数
  32. int len2 = sizeof(data2) / sizeof(data2[0]);
  33.  
  34. // 確認のための出力(任意)
  35. // printf("data2の長さ len2 = %d\n", len2);
  36.  
  37. // 3. cat_data関数の呼び出し(配列の連結)
  38. // 配列名を関数に渡すと、先頭要素へのポインタとして渡される
  39. cat_data(data1, data2, len2);
  40.  
  41. // 4. 連結後のdata1の出力
  42. printf("出力結果例\n");
  43. // data1の全要素(7個)を出力する
  44. for (int i = 0; i < 7; i++) {
  45. printf("data1[%d] = %d\n", i, data1[i]);
  46. }
  47.  
  48. return 0;
  49. }
  50.  
Success #stdin #stdout 0.01s 5296KB
stdin
Standard input is empty
stdout
出力結果例
data1[0] = 1
data1[1] = 2
data1[2] = 3
data1[3] = 4
data1[4] = 5
data1[5] = 6
data1[6] = 7