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