您的位置:首页 > 其它

结构体

2016-06-28 15:09 363 查看
/* 结构体内的内部变量是不能有初始值,但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.p
printf("str1 = %s \nstr2 = %s\n", mystr1.p, mystr2.p);

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct