-
一個(gè)函數(shù)可被多次調(diào)用
查看全部 -
傳入時(shí)只是傳入了a,b被賦的數(shù)值
查看全部 -
Array數(shù)組其實(shí)是一種指針常量,而p則是一種指針變量(數(shù)組和指針有一定的通用性,又有一定的差別,指針可以表達(dá)數(shù)組,而數(shù)組不可以表達(dá)指針);
p++:指針偏移,運(yùn)行效率比數(shù)組高;
為什么p+4;*p=101 與p[4]=101等價(jià)???p[4]=101代表從初始位置(a的地址就始)以四個(gè)字節(jié)為一步,向前走4步,到達(dá)某個(gè)位置,然后對(duì)這個(gè)位置進(jìn)行初始化賦值,即把101賦給這個(gè)地址所代表的內(nèi)存空間。p[4]代表從初始位置(a的地址就始)以四個(gè)字節(jié)為一步,向前走4步,到達(dá)某個(gè)位置。*p=101,代表此時(shí)指針指向的地址(即走了四步后所在位置)并對(duì)這個(gè)地址所在的內(nèi)存空間進(jìn)行初始化,賦值為101。? ??
數(shù)組名本質(zhì)是一個(gè)數(shù)組開頭的地址,可以把它賦值給指針變量
int array[n]
int *p=array;
2也是因?yàn)檫@樣:它是一個(gè)固定的值(指針常量),不可以
array+=2;
指針可以;
p+=2;
? ? ?
查看全部 -
變量名只是代號(hào),變量的本質(zhì)是內(nèi)存;
在標(biāo)準(zhǔn)的C語(yǔ)言中,不允許直接對(duì)內(nèi)存地址進(jìn)行操作,只能是對(duì)操作系統(tǒng)已經(jīng)分配給的內(nèi)存空間進(jìn)行操作。(防止用戶自己操作內(nèi)存地址時(shí)侵吞系統(tǒng)內(nèi)存或者其他程序的內(nèi)存)
int *p=&a;? ? p 指針指向的變量地址; *p ?指針指向的變量值; &p 指針自己所在的地址。既然一個(gè)指針保存的是變量的地址,對(duì)32位CPU,地址有4個(gè)字節(jié),就需要4個(gè)內(nèi)存單元來存儲(chǔ),所以每次++p在內(nèi)存里都是跳4格。?
函數(shù)調(diào)用信息保存在棧(stack)中。 int *pa=&a指將a的地址傳給pa。因此p pa看到的是a的地址(&a)。 而p &pa才能看到pa本身的地址。
查看全部 -
gdb 是gcc自帶的一種調(diào)試工具 ;
gdb -help查看gdb用法;?
gcc -g +源代碼文件-o +執(zhí)行文件名(.out 類型) 生成可調(diào)試的執(zhí)行文件;
gdb +./ 可調(diào)試執(zhí)行文件名;
進(jìn)入gdb調(diào)試后,l表示查看程序;回車表示繼續(xù)上一命令;start表示調(diào)試,會(huì)自動(dòng)在main函數(shù)第一行程序加斷點(diǎn);n表示執(zhí)行新行;s(step)表示進(jìn)入函數(shù)中,需執(zhí)行到函數(shù)所在行;p+變量名表示打印變量數(shù)值,bt 查看堆棧;f 1:切換到堆棧中編號(hào)為1的函數(shù)中;q:退出調(diào)試;
change(int a,int b);實(shí)際過程中,只是傳遞給了a,b數(shù)值,作用范圍僅在函數(shù)內(nèi)部,故不起換值作用,而change(int *a,int *b )傳遞給了參數(shù)地址,對(duì)存儲(chǔ)單元中的值進(jìn)行替換,起實(shí)際作用。
查看全部 -
系統(tǒng)內(nèi)存分配
查看全部
舉報(bào)