-
int *p=&a:定義的指針p是整型數據,p++之后,p中的地址就會增加4個字節。
這就是指針偏移運算,這種方式比CPU直接取地址效率還要高,所以設計程序都會盡可能地采取這種方式。
p+=3:將指針向下移動3格,如果p是整型,就移動12個字節。(等價于p[3])
數組和指針的本質都是地址,所以*pa=array,相當于將array數組的地址賦值給pa指針,這樣pa[1]的功能和array[1]的功能就沒有區別了。
數組是指針常量,指針是指針變量,數組的指向對象是固定不變的,指針變量的指向對象會改變,所以這兩種指針還是有所差別的,指針能實現數組的功能,但是數組不一定能實現指針的功能。
查看全部 -
在函數名前加上星號,也可以調用函數,一般用作回調函數使用。(第31行)
查看全部 -
全局變量儲存在數據段,先申明的地址小,后申明的地址大,調用的函數里的局部變量存放在棧中。
int整型占用4個字節,變量的內存地址只顯示第一個字節。
編譯后的程序,有可能不會將變量按照編寫代碼的順序存入內存,因為gcc編譯時會對代碼進行優化,它會將同類型的變量在內存中放到一起。
查看全部 -
調用的哪個函數,運行到函數的哪一行,變量的相關數據都被記錄保存到棧當中了。
p &x:表示查看x變量所在的地址。
變量的本質是地址,是內存空間。
標準的編程語言不允許直接對內存地址進行操作,操作系統不允許。
指針也是一個變量類型,保存內存地址。
查看全部 -
0x7fffffffffffffff以下的內存由用戶操作,上面的內存地址由操作系統自己調用。
代碼段放編譯后的程序,數據段放常量、變量,中間的綠色是自由可分配空間。
查看全部 -
一般用gcc指令編譯過的程序不能被用于gdb(一個Linux自帶的調試工具)調試,要用gcc -g xxx.c指令才可以。
用gdb調試要保存.c的源代碼,否則會有一些調試功能無法使用(比如調試時無法顯示行號)。
gdb ./xxx.out:表示調試xxx文件
在調試模式下(括號中含有gdb),輸入l(或者list)顯示整個源代碼,輸入break打斷點,輸入start開始調試(此時會顯示斷點在哪里),p x表示輸出x這個變量的值,n繼續下一步執行,當斷點打到調用的函數前可以用s指令來進入函數內部,bt查看函數堆棧(可以顯示當前函數調用的堆棧情況), f n代表轉到相應的標號n堆棧進行函數的調用。
本次練習案例中,change函數的a和b是形參,他們值的改變,不能代表main函數里的實參也改變了。
按q退出調試
查看全部 -
*a代表指針,&a代表取地址
查看全部 -
晚安查看全部
-
1
查看全部 -
內存地址采用十六進制數表示,十六進制數都是以0x開頭,十六進制數的每一位可以表示四個二進制數,因此對于一個32位系統,其所有的內存空間地址可以被八位十六進制數表示。 每個十六進制的內存地址都指向一個字節的內存空間,因此32位的系統總共可以配置2^10*2^10*2^10*2^2=4GB的內存; 對于64位操作系統,只有前48位編碼的地址用于程序存儲,后十六位為系統內核保留使用的地址編碼段; 內存地址從低到高依次編碼存儲代碼段(函數體指令等)、數據段(常量和全局變量)、堆、自由空間、棧。查看全部
-
內存查看全部
-
什么?查看全部
-
你好啊查看全部
-
你好查看全部
-
如果想用GDB gcc -g *.c -o *.out查看全部
舉報