fork download
  1. #include <stdio.h>
  2.  
  3. struct Data {
  4. int arr[3];
  5. };
  6.  
  7. void modifyStruct(struct Data d) {
  8. d.arr[0] = 999;
  9. printf("関数内 (コピー): arr[0] = %d\n", d.arr[0]);
  10. }
  11. void modifyArray(int a[]) {
  12. a[0] = 999;
  13. }
  14.  
  15. int main() {
  16. struct Data myData = {{1, 2, 3}};
  17. printf("--- 構造体経由の検証 ---\n");
  18. printf("呼び出し前: arr[0] = %d\n", myData.arr[0]);
  19.  
  20. modifyStruct(myData);
  21.  
  22. printf("呼び出し後: arr[0] = %d\n", myData.arr[0]);
  23. printf("結果: 値が変わっていないため、コピーされていることがわかります。\n\n");
  24.  
  25. int myArr[3] = {1, 2, 3};
  26. printf("--- 通常の配列渡しの検証 ---\n");
  27. modifyArray(myArr); // 配列を渡す(ポインタが渡る)
  28. printf("呼び出し後: myArr[0] = %d\n", myArr[0]);
  29. printf("結果: 値が変わっているため、オリジナルが操作されています。\n");
  30.  
  31. return 0;
  32. }
  33.  
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
--- 構造体経由の検証 ---
呼び出し前: arr[0] = 1
関数内 (コピー): arr[0] = 999
呼び出し後: arr[0] = 1
結果: 値が変わっていないため、コピーされていることがわかります。

--- 通常の配列渡しの検証 ---
呼び出し後: myArr[0] = 999
結果: 値が変わっているため、オリジナルが操作されています。