我測試淺拷貝的結構與此代碼:爲什麼結構淺拷貝不起作用?
#include "stdio.h"
#include "conio.h"
int main() {
struct str {
char * name;
int value;
};
struct str str_1 = {"go", 255};
struct str str_2;
str_2 = str_1;
str_1.name = "back";
printf("%s\n",str_1.name);
printf("%s\n",str_2.name);
printf("\n");
system("pause");
return 0;
}
我期待的結果應該是:
back
back
但它是:
back
go
編輯:我預計,因爲淺拷貝,str_1.name
和str_2.name
應該始終指向相同的pla CE。
編輯:並與動態分配的,我得到了我的預期:
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main() {
struct str {
char * name;
int value;
};
struct str str_1;
struct str str_2;
str_1.name = (char*) malloc(5);
strcpy(str_1.name,"go");
str_2 = str_1;
strcpy(str_1.name,"back");
printf("%s\n",str_1.name);
printf("%s\n",str_2.name);
printf("\n");
system("pause");
return 0;
}
結果是:
back
back
什麼是我誤會嗎?
我不知道。你爲什麼期望你的預期?這不是什麼「淺」的意思... –
恕我直言,這個問題沒有錯。 「顯而易見度」的程度不應該吸引downvotes。廣義相對論對一些民間人士來說顯而易見 – Bathsheba
@Bathsheba:沒錯,但描述期望的缺乏吸引了低估。很難解釋爲什麼這個世界不符合隱藏的期望。 –