结构体

来源:互联网 发布:js中的map 编辑:程序博客网 时间:2024/05/28 05:13
/* 结构体内的内部变量是不能有初始值,但C++的结构可以 */struct MyStructX{//int num = 10;C:不可以,C++可以。int num;char str[10];};结构体变量可以相互赋值如:#include<stdio.h>#include<stdlib.h>/* 结构体内的内部变量是不能有初始值,但C++的结构可以 */struct MyStructX{//int num = 10;C:不可以,C++可以。int num;char str[10];};struct MyStruct{struct MyStructX my1;int num;char str[10];};int  main(){struct MyStruct my2 = { { 10, "calc" }, 20, "mspaint" };struct MyStruct my3 = my2;//这样给结构体赋值是可行的。printf("%d,%s,%d,%s\n", my2.my1.num, my2.my1.str, my2.num, my2.str);printf("%d,%s,%d,%s\n", my3.my1.num, my3.my1.str, my3.num, my3.str);system("pause");}深浅拷贝:#include<stdio.h>#include<stdlib.h>//对于数据来说,深浅拷贝一样。//对于指针,浅拷贝是拷贝地址,深拷贝是拷贝内容。struct str{char *p;int num;};void main(){struct str mystr1;mystr1.num = 30;mystr1.p = malloc(30);strcpy(mystr1.p,"hello world");//struct str mystr2 = mystr1;//这个属于浅拷贝。//free(mystr1.p);//这个地址释放,二个结构都挂掉。struct str mystr2 = mystr1;mystr2.p = malloc(30);strcpy(mystr2.p, mystr1.p);//深拷贝,即mystr1.p与mystr2.p没有关系。free(mystr1.p);//这个地址释放,只会对 mystr1.p 有效。不影响mystr2.pprintf("str1 = %s \nstr2 = %s\n", mystr1.p, mystr2.p);system("pause");}

0 0