C 中結構體詳解及mem 記憶體操作函式

2021-06-06 01:12:36 字數 2168 閱讀 7685

1、結構體的宣告:struct 

結構體名[可省

]變數列表[可省

](多個變數用逗號隔開);

例1:struct employee

char strempid[10];

}emp;  //emp為結構體變數

例2:struct employee

char strempid[10];

};  //預設

struct employee emp;//定義屬於employee 的結構體變數

例3:struct emp;  //該法只能在建立結構體時定義該結構體的變數,此法適用性較差

2、目前一般用下述定義方法:

typedef struct employee[可省]

成員列表

}emp,*pemp;  //emp為型別,

pemp

為指標;均是結構體名,而非變數。

emp e2; //e2為結構體變數

pemp e3=null;  //等價於

employee* e3=null;

e3=&e2;

strcpy(e3->strempid,」1000」); //對第

0個位置賦值

strcpy((e3+1)->strempid,」1002」); //」1002」表示長度為5

,(e3+1)

即e3[1] ,對第1個位置賦值

typedef  employee emp;

typedef  employee* pemp;

e3=( employee*) malloc(10*sizeof(employee));

free(e3); //malloc 必須與

free

對應,否則會造成資源洩漏

e3=new employee[10]; //10個空間

delete e3;

3、結構體變數引用

同類結構體變數可以互相直接賦值,如emp e1,e2; e1 = e2;

非指標變數用"."

來使用結構體成員變數,如

e1.strempid;在指向結構體變數的指標變數中使用 "->"

。即有:結構體名

.成員名 

<=> p->成員名

<=>(*p).成員名。

4、結構體初始化:

可選擇針對某個結構體變數的成員逐個進行初始化,或者對整個結構體變數初始化。但整體初始化只能在定義結構體變數的時候進行。例:

struct  aatest1=,test2=;

struct aa test3=;

對於單個成員賦值只需用:" 結構體變數名.

成員名 

=  ;"

5、結構體變數可為陣列,如:

struct  aaaaa[3];

mem* 記憶體操作函式

(1) 記憶體之間拷貝字元

void * memcpy(void *dest,const void *src,size_t count);

(2) 給記憶體塊設定特定的字元值

void *memset(void *dest,int c, size_t count); // dest表示記憶體塊位址

eg: memset(&e1,0,sizeof(employee)); //清0

(3)拷貝字元,遇到

c停止且返回

dest

或拷貝個數為

count停止

void *_memcpy(void *dest,const void *src,int c,unsigned int count);

eg: void main()

{int n;

int nsrc=100;

memcpy(&n,&nsrc,sizeof(int));

employee e1;

strcpy(e1.strempid,」1000」);

employee e2;

memcpy(&e2,&e1,sizeof(employee));  //e2=e1  當

employee

中含指標時就不可以了;此外當e1

為指標時不用&

結構體大小及記憶體對齊

結構體大小 在計算結構體大小時,有幾點需要注意 1.char可存放在任意位址,short存放在能被2整除的位址,int存放在能被4整除的位址 即資料型別存放的位址要能被其資料型別所佔位元組數整除。可先將每個成員的位元組數寫出,然後從第二個成員開始,將前面成員的總位元組數補齊成當前位元組數的倍數。2....

詳解C語言中的記憶體四區模型及結構體對記憶體的使用

記憶體四區 1 區 區code,程式被作業系統載入到記憶體的時候,所有的可執行 都載入到 區,也叫 段,這塊記憶體是不可以在執行期間修改的。2 靜態區 所有的全域性變數以及程式中的靜態變數都儲存到靜態區。3 棧區 棧stack是一種先進後出的記憶體結構,所有的自動變數,函式的形參都是由編譯器自動放出...

C語言 記憶體中結構體位元組對齊

一 位元組對齊作用和原因 對齊的作用和原因 各個硬體平台對儲存空間的處理上有很大的不同。一些平台對某些特定型別的資料只能從某些特定位址開始訪問。比如有些架構的cpu在訪問乙個沒有進行對齊的變數的時候會發生錯誤,那麼在這種架構下程式設計必須保證位元組對齊,其他平台可能沒有這種情況,但是最常見的是如果不...