1结构体赋值
#include <windows.h>struct MyStruct{int a;int b;char c[20];};int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTRlpCmdLine,int nCmdShow){char szBuffer[100];struct MyStruct t1 = {101, 202, "hello struct"};struct MyStruct t2 = t1;wsprintf(szBuffer, "MyStruct t1: %d, %d, %s",t1.a, t1.b, t1.c);MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);wsprintf(szBuffer, "MyStruct t2: %d, %d, %s",t2.a, t2.b, t2.c);MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);return 0;}
结构体成员直接赋值;也可以把一个结构体变量赋值给另一个同类型的结构体变量,t2 = t1;
2有指针成员的结构体赋值
#include <windows.h>struct MyStruct{int a;int b;char* c;};int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTRlpCmdLine,int nCmdShow){char szBuffer[100];struct MyStruct t1;t1.a = 101;t1.b = 202;// 为指针区域赋值char *p = (char*)malloc(10*sizeof(char));strcpy(p, "hellostru");t1.c = p;struct MyStruct t2;t2 = t1;wsprintf(szBuffer, "MyStruct t1: %d, %d, %s",t1.a, t1.b, t1.c);MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);wsprintf(szBuffer, "MyStruct t2: %d, %d, %s",t2.a, t2.b, t2.c);MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);wsprintf(szBuffer, "t1 pointer addr: %x",t1.c);MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);wsprintf(szBuffer, "t2 pointer addr: %x",t2.c);MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);return 0;}
运行如下;后两个消息框输出的是指针地址;
有指针成员的结构体;t2=t1,会直接将t1的指针变量赋值给t2.c,代码不会出错;
如果我们在赋值之后将t1所用的资源释放掉,那么使用t2的话则可能导致内存泄漏了。