程序內(nèi)存分配:
練習(xí)1:
在函數(shù)里聲明的static變量峡迷,只對(duì)該函數(shù)可見(jiàn),但my_var_initialized只被創(chuàng)建和初始化一次。
第一次調(diào)用時(shí)障般,if語(yǔ)句中的條件my_var_initialized是全局變量缚窿,為false棘幸,函數(shù)內(nèi)部賦值之后,第二次調(diào)用倦零,my_var_initialized為true够话,直接返回蓝翰。
兩個(gè)代碼結(jié)果是一樣的。
練習(xí)2:
var_ptr = (int *)malloc(sizeof(int));? 格式:(指針類型)malloc(大信啊)
練習(xí)3:
1.多了一個(gè)=號(hào)畜份。。欣尼。爆雹。或者應(yīng)該array_size-1
2.應(yīng)該寫成int *a = (int *)malloc(sizeof(int *)* array_size)
3.字符串要+1愕鼓,有‘\0’
原型:extern int strlen(char *s);
用法:#include
功能:計(jì)算字符串s的(unsigned int型)長(zhǎng)度
說(shuō)明:返回s的長(zhǎng)度钙态,不包括結(jié)束符NULL。
strcpy函數(shù)并不檢查目的緩沖區(qū)的大小邊界菇晃,而是將源字符串逐一的全部賦值給目的字符串地址起始的一塊連續(xù)的內(nèi)存空間册倒,同時(shí)加上字符串終止符。可以使用另一個(gè)具有相同功能的函數(shù): strncpy磺送,該函數(shù)可以指定要復(fù)制的字符串的長(zhǎng)度驻子。
strcpy_s更為安全,在使用strcpy_s估灿,使用兩個(gè)參數(shù)的時(shí)候要特別注意的一點(diǎn)是崇呵,兩個(gè)參數(shù)但如果:char *str=new char[7];會(huì)出錯(cuò):提示不支持兩個(gè)參數(shù)。new出來(lái)的字符串馅袁,提示不支持兩個(gè)參數(shù)域慷,所以必須用三個(gè)參數(shù)的。
strcat用于將兩個(gè)char類型鏈接的函數(shù)汗销。
函數(shù)原型:extern char *strcat(char *dest,char *src);
參數(shù):
dest? 目標(biāo)數(shù)組指針
src? 源字符串指針
返回值:返回指向dest的指針
函數(shù)功能:把src所指字符串添加到dest結(jié)尾處(覆蓋dest結(jié)尾處的'\0')并添加'\0'犹褒。
注意事項(xiàng):
src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來(lái)容納src的字符串。
4.
溢出弛针,超出數(shù)組r的已分配內(nèi)存
5.
寫入沖突叠骑,內(nèi)存溢出。strcat不是新分配一塊內(nèi)存來(lái)存合并后的字符串钦奋,而是將src的內(nèi)容寫在dest的后面并返回dest的指針座云。但原代碼中的dest是字符串常量,無(wú)法寫入付材。
6.--先執(zhí)行朦拖,然后才是*。(雖然他們倆優(yōu)先級(jí)相同但是結(jié)合方式是由右向左的)厌衔。所以最后減的是地址璧帝,最好加上括號(hào)~
7.函數(shù)調(diào)用完成會(huì)回收局部變量,不要返回局部變量的指針富寿。
練習(xí)4:
1.如果直接返回了睬隶,那么full_msg就沒(méi)有被釋放锣夹,導(dǎo)致內(nèi)存泄漏。
2.應(yīng)該把p指向的string也釋放掉