#include <stdio.h>
struct Data {
int arr[3];
};
void modifyStruct(struct Data d) {
d.arr[0] = 999;
printf("関数内 (コピー): arr[0] = %d\n", d.
arr[0]); }
void modifyArray(int a[]) {
a[0] = 999;
}
int main() {
struct Data myData = {{1, 2, 3}};
printf("呼び出し前: arr[0] = %d\n", myData.
arr[0]);
modifyStruct(myData);
printf("呼び出し後: arr[0] = %d\n", myData.
arr[0]); printf("結果: 値が変わっていないため、コピーされていることがわかります。\n\n");
int myArr[3] = {1, 2, 3};
printf("--- 通常の配列渡しの検証 ---\n"); modifyArray(myArr); // 配列を渡す(ポインタが渡る)
printf("呼び出し後: myArr[0] = %d\n", myArr
[0]); printf("結果: 値が変わっているため、オリジナルが操作されています。\n");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpzdHJ1Y3QgRGF0YSB7CiAgICBpbnQgYXJyWzNdOwp9OwoKdm9pZCBtb2RpZnlTdHJ1Y3Qoc3RydWN0IERhdGEgZCkgewogICAgZC5hcnJbMF0gPSA5OTk7CiAgICBwcmludGYoIumWouaVsOWGhSAo44Kz44OU44O8KTogYXJyWzBdID0gJWRcbiIsIGQuYXJyWzBdKTsKfQp2b2lkIG1vZGlmeUFycmF5KGludCBhW10pIHsKICAgIGFbMF0gPSA5OTk7IAp9CgppbnQgbWFpbigpIHsKICAgIHN0cnVjdCBEYXRhIG15RGF0YSA9IHt7MSwgMiwgM319OwogICAgcHJpbnRmKCItLS0g5qeL6YCg5L2T57WM55Sx44Gu5qSc6Ki8IC0tLVxuIik7CiAgICBwcmludGYoIuWRvOOBs+WHuuOBl+WJjTogYXJyWzBdID0gJWRcbiIsIG15RGF0YS5hcnJbMF0pOwogICAgCiAgICBtb2RpZnlTdHJ1Y3QobXlEYXRhKTsgCiAgICAKICAgIHByaW50Zigi5ZG844Gz5Ye644GX5b6MOiBhcnJbMF0gPSAlZFxuIiwgbXlEYXRhLmFyclswXSk7CiAgICBwcmludGYoIue1kOaenDog5YCk44GM5aSJ44KP44Gj44Gm44GE44Gq44GE44Gf44KB44CB44Kz44OU44O844GV44KM44Gm44GE44KL44GT44Go44GM44KP44GL44KK44G+44GZ44CCXG5cbiIpOwoKICAgIGludCBteUFyclszXSA9IHsxLCAyLCAzfTsKICAgIHByaW50ZigiLS0tIOmAmuW4uOOBrumFjeWIl+a4oeOBl+OBruaknOiovCAtLS1cbiIpOwogICAgbW9kaWZ5QXJyYXkobXlBcnIpOyAgIC8vIOmFjeWIl+OCkua4oeOBme+8iOODneOCpOODs+OCv+OBjOa4oeOCi++8iQogICAgcHJpbnRmKCLlkbzjgbPlh7rjgZflvow6IG15QXJyWzBdID0gJWRcbiIsIG15QXJyWzBdKTsKICAgIHByaW50Zigi57WQ5p6cOiDlgKTjgYzlpInjgo/jgaPjgabjgYTjgovjgZ/jgoHjgIHjgqrjg6rjgrjjg4rjg6vjgYzmk43kvZzjgZXjgozjgabjgYTjgb7jgZnjgIJcbiIpOwoKICAgIHJldHVybiAwOwp9Cg==