-
將str指針往下移了三個,將hello中第二個l替換為\0,將字符串提前結(jié)束
查看全部 -
int *p=&a:定義的指針p是整型數(shù)據(jù),p++之后,p中的地址就會增加4個字節(jié)。
這就是指針偏移運算,這種方式比CPU直接取地址效率還要高,所以設(shè)計程序都會盡可能地采取這種方式。
p+=3:將指針向下移動3格,如果p是整型,就移動12個字節(jié)。(等價于p[3])
數(shù)組和指針的本質(zhì)都是地址,所以*pa=array,相當于將array數(shù)組的地址賦值給pa指針,這樣pa[1]的功能和array[1]的功能就沒有區(qū)別了。
數(shù)組是指針常量,
指針是指針變量,
指針能實現(xiàn)數(shù)組的功能,但是數(shù)組不一定能實現(xiàn)指針的功能。
arry+=2會報錯查看全部 -
gdb命令:
x/3d? 地址:按照十進制d,連續(xù)顯示3個(3)變量的地址(x),默認間隔為4個空格查看全部 -
“p”是一個地址,則“*p”是到這個地址去取里面的值,“(*p)”表示為一個整體,“(*p)(數(shù)據(jù))”若p為代碼段,則調(diào)用這個函數(shù),傳參數(shù)"數(shù)據(jù)"進去
查看全部 -
最下面的內(nèi)存最先分配
最先分配的棧地址反而更大
棧的特點:先進后出
靜態(tài)變量不在棧里頭,相同變量名稱的靜態(tài)變量分別在兩個函數(shù)里便為兩個不同變量,屬于每個函數(shù)特有的;
全局變量為所有函數(shù)公用的。其地址不變。
一個函數(shù)被多次調(diào)用時,靜態(tài)變量指向的還是數(shù)據(jù)段一個固定的地址;即不同函數(shù)的count是不同的count,但同一個函數(shù)不管調(diào)用多少次count,它指向的都是數(shù)據(jù)段的某個地址。查看全部 -
無&符,輸出變量值
有該符,輸出地址
查看全部 -
變量名只是代號,變量的本質(zhì)是內(nèi)存;
在標準的C語言中,不允許直接對內(nèi)存地址進行操作,只能是對操作系統(tǒng)已經(jīng)分配給的內(nèi)存空間進行操作。
int *p=&a;??? p 指針指向的變量地址; *p? 指針指向的變量值; &p 指針自己所在的地址。既然一個指針保存的是變量的地址,對32位CPU,地址有4個字節(jié),就需要4個內(nèi)存單元來存儲,所以每次++p在內(nèi)存里都是跳4格。
函數(shù)調(diào)用信息保存在棧(stack)中。 int *pa=&a指將a的地址傳給pa。因此p pa看到的是a的地址(&a)。 而p &pa才能看到pa本身的地址。查看全部 -
代碼段放編譯后的程序,數(shù)據(jù)段放常量、變量,中間的綠色是自由可分配空間。查看全部 -
0x表示十六進制
查看全部 -
加了地址符后的a表示一個地址,*a是去找到該地址下對應(yīng)的值
可以看出0中a為地址,需*a找到對應(yīng)值
1中a為確切值
查看全部 -
gdb?? -help完整顯示各種用法
(gdb)start? 開始執(zhí)行
紅框為自動設(shè)置的斷點為12行處(gdb) p a
分別為printf a?? 即為輸出變量a
(gdb)? n
為換到下一行(gdb)? bt?? 查看函數(shù)堆棧
堆棧像書,摞在上面先執(zhí)行(gdb) f 1
f為切換棧,即切換到棧1
單用change,由于形參,兩個函數(shù)中a.b不同,無法改變--所以需要指針
查看全部 -
*a?? 表指針
&a? 取地址查看全部 -
注意:這里偏移三格指向arrary[0]是因為中間有一個變量i,然后是b,然后才是array[0],而不是array[1]查看全部
-
指針變量上加*表示:打印其保存的地址指向的值查看全部
-
不帶&符號:打印變量里面的值
否則:打印變量的地址查看全部
舉報
0/150
提交
取消