@(C語言)
[toc]
內(nèi)存
c語言中內(nèi)存分三個區(qū):
程序區(qū):存儲程序的二進制文件
靜態(tài)存儲區(qū):全局變量和靜態(tài)變量
-
動態(tài)存儲區(qū):
- 堆區(qū):由程序動態(tài)分配
- 棧區(qū):由編譯器動態(tài)分配,編譯器自動申請和釋放
-
(void )malloc*(int size):
- 分配內(nèi)存的單元是字節(jié),
- 分配大小是size。
- 分配的內(nèi)存是連續(xù)的
-
void* calloc(count,size)
- 申請count個大小為size的連續(xù)空間,這個連續(xù)空間的大小是size
- 而不是Count*Size的空間,同時它會初始化0;
-
free
- 動態(tài)申請的內(nèi)存用完后要釋放,且不能重復釋放
- 釋放完要將它的指針賦值為NULL,否則將成為野指針
- 申請和釋放要一一對應
字符串
C語言中沒有String
常量區(qū)的內(nèi)容不能被修改。
char * str ="string";
//系統(tǒng)先分配了一個常量區(qū)A,用來存儲"string"
//char * str 沒有初始化
//將常量區(qū)A的首地址指向str
//當我們修改的時候失敗,是因為常量區(qū)不允許修改的
char * ch =(char *)malloc(100*sizeof(char));
//將"china"內(nèi)容copy過來賦值到指定空間
//如果 ch="china",則是將ch指向了常量地址
strcpy(ch,"china");
ch[2] ='b';
printf("%s \n",ch)
- strcpy 拷貝
- strcat 添加
char fundaction [25];
char *A=" a ";
char *B=" b ";
char *C =" c";
strcpy(fundaction, A);
strcat(fundaction,B);
strcat(fundaction,C);
printf("fundaction : %s \n",fundaction);
輸出:
fundaction : a b c