结构体
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"); }
相关文章推荐
- C#中struct和class的区别详解
- 深入剖析C++中的struct结构体字节对齐
- C++ 关于STL中sort()对struct排序的方法
- C# Struct的内存布局问题解答
- 深入C++中struct与class的区别分析
- 浅析c与c++中struct的区别
- c++中struct使用注意事项
- 深入解析C#编程中struct所定义的结构
- 浅析内存对齐与ANSI C中struct型数据的内存布局
- php读取二进制流(C语言结构体struct数据文件)的深入解析
- 详解C++程序中定义struct结构体的方法
- Go语言struct类型介绍
- 在Python的struct模块中进行数据格式转换的方法
- Python struct模块解析
- Go语言中struct的匿名属性特征实例分析
- 优化结构体中元素的布局
- ext关于session失效的处理
- Python 10.4 struct
- typedef struct与struct的区别
- Linux C中struct tm结构与time_t相互转换