typedef,结构体,共用体,联合体
typedef的用途:
封裝數據類型,方便移植
簡化函數指針的定義
結構體:不同類的型元素匯聚。
(1)、在聲明類型的同時定義變量:
struct結構體名{
??成員列表
}變量名列表;
?
(2)、直接定義結構體類型變量
struct
{
????成員列表
}變量名表列;
?
指向結構體變量的指針
定義形式:struct結構體名 *結構體指針名;
例如:struct student *p;
#define_CRT_SECURE_NO_WARNINGS??//去掉安全檢查
#include<stdio.h>
#include<stdlib.h>???????
?
structmydata
{
???intnum;
???charstr[100];
};
?
voidmain()
{
???//int a;
???//int *p;
???//struct mydata *p;
???//printf("%d", sizeof(p));
?
???structmydatamd;??//實例化結構體
???md.num = 99;
???sprintf(md.str,"gogogo");
???printf("md.num=%d,md.str=%s",md.num,md.str);??//打印數據
?
???structmydata *p;??//p存儲地址 struct mydata決定了大小還有如何解析
???printf("\n%d",sizeof(p));
?
???p = &md;//結構體指針初始化,存儲地址
???printf("\n(*p).num=%d,(*p).str = %s", (*p).num, (*p).str);
???printf("\np->num = %d,p->str=%s",p->num,p->str);
?
???//指針訪問結構體,第一種方式(*p).成員變量,第二種p->成員變量
?
???getchar();
}
?
結構體變量:
簡單案例:
結構體成員地址從低到高連續分配,首成員對應低地址。
?
公用/聯合體(union):使用不同類型的變量共占用一段內存(相互覆蓋),次共用體大小為元素中最大字節變量。
?
共用體成員索引:可以通過.成員變量符,也可以通過???à指針索引。????????
?????
union案例
?
枚舉變量:
在內存中申請的。
malloc()返回的類型是:void *類型的
??????2、malloc之后要記著釋放,使用free函數。否則會造成內存泄露,導致其它程序不能再使用這塊兒內存了。
操作系統在管理malloc的時候是一下這種方式:
//?????|???? 地址????????|
//?????|???? 大小????????|?????????
調用malloc的時候,系統每次都會為malloc創建一個節點,并記錄本次malloc的首地址和malloc的大小。
?
malloc內存里面申請出來的值是什么值?
在gcc這個編譯器下,malloc默認把申請的內存中的初始值變成0,但是在不同的編譯器下回有所不同。
?
如果想將malloc中申請的內存的值變成0,可以使用memset(p,0x0,100);如果想使用這個函數,要加上頭文件<string.h>
?
calloc()
realloc:當內存不夠了時候,可以通過realloc繼續申請內存空間。
realloc的實現策略:
當malloc后面有足夠的存儲空間。這時候相當于把malloc的首地址不變,只是把malloc的大小改大些。
如果malloc后面的存儲空間不夠,那么這時候realloc新開辟一個地址空間,然后將原來malloc的內存里的內存復制到新開辟的內存空間中。
總結
以上是生活随笔為你收集整理的typedef,结构体,共用体,联合体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 朝鲜有发射卫星上天吗
- 下一篇: 部队离休干部遗属物业补贴