c語言中指標的15個問題
aqiaoboy
1 指標的四要素
1指標變數,表示乙個記憶體位址,通常為邏輯位址,與實際的實體地址還有乙個對映關係。
2指標變數的長度,在win32下為四個位元組,
3指標指向的變數
該記憶體位址空間下存放的變數,具體內容可能是各種型別的變數。
4 指標指向的變數的長度,以該記憶體位址空間開始的記憶體空間大小。
2 const,volatile修飾指標的含義
const char *cpch=」hello』;
表示指標指向的變數不可改變,但指標本身是可以改變的
char * const pchc;
指標指向的變數可以改變,但指標本身不可改變。
const char * const pchc;
兩者都不可變。
3 堆和棧上的指標
指標所指向的這塊記憶體是在**分配的,在堆上稱為堆上的指標,在棧上為棧上的指標。
在堆上的指標,可以儲存在全域性資料結構中,供不同函式使用訪問同一塊記憶體。
在棧上的指標,在函式退出後,該記憶體即不可訪問。
4 什麼是指標的釋放?
具體來說包括兩個概念。
1 釋放該指標指向的記憶體,只有堆上的記憶體才需要我們手工釋放,棧上不需要。
2 將該指標重定向為null。
5 near,far型指標的區別?
老式的ibm pc相容機才有這種區別,因為老式機不能完全支援32位指標,
所以才分為16位指標,(near),和32位指標(far)
從386開始沒有這種區別,都是32位指標。
6 資料結構中的指標?
其實就是指向一塊記憶體的位址,通過指標傳遞,可實現複雜的記憶體訪問。
7 函式指標?
指向一塊函式的入口位址。
8 指標作為函式的引數?
比如指向乙個複雜資料結構的指標作為函式變數
這種方法避免整個複雜資料型別記憶體的壓棧出棧操作,提高效率。
注意:指標本身不可變,但指標指向的資料結構可以改變。
9 指向指標的指標?
指標指向的變數是乙個指標,即具體內容為乙個指標的值,是乙個位址。
此時指標指向的變數長度也是4位。
10 指標與位址的區別?
區別:1指標意味著已經有乙個指標變數存在,他的值是乙個位址,指標變數本身也存放在乙個長度為四個位元組的位址當中,而位址概念本身並不代表有任何變數存在。
2 指標的值,如果沒有限制,通常是可以變化的,也可以指向另外乙個位址。
位址表示記憶體空間的乙個位置點,他是用來賦給指標的,位址本身是沒有大小概念,指標指向變數的大小,取決於位址後面存放的變數型別。
11 指標與陣列名的關係?
其值都是乙個位址,但前者是可以移動的,後者是不可變的。
12 怎樣防止指標的越界使用問題?
必須讓指標指向乙個有效的記憶體位址,
1 防止陣列越界
2 防止向一塊記憶體中拷貝過多的內容
3 防止使用空指標
4 防止改變const修改的指標
5 防止改變指向靜態儲存區的內容
6 防止兩次釋放乙個指標
7 防止使用野指標。
13 指標的型別轉換?
指標轉換通常是指標型別和void * 型別之前進行強制轉換,從而與期望或返回void指標的函式進行正確的交接。
14 什麼是指標退化?
如果用乙個陣列作為函式入參
比如void fun(char a[100])
15 指標的移動問題?
指標p ++具體移動的位元組數等於指標指向的變數型別大小。
c語言中指標的15個問題
c語言中指標的15個問題 c語言中指標的15個問題 aqiaoboy 1 指標的四要素 1指標變數,表示乙個記憶體位址,通常為邏輯位址,與實際的實體地址還有乙個對映關係。2指標變數的長度,在win32下為四個位元組,3指標指向的變數 該記憶體位址空間下存放的變數,具體內容可能是各種型別的變數。4 指...
C語言中指標大全
1.使用二維字串儲存字串的時候會出現儲存浪費的情況,使用指標陣列儲存則不會 char s for i 0 ifor i 0 i 3 i 2.指標陣列作為函式引數傳遞多個字串給另乙個函式。指標陣列是乙個陣列,只是裡面存放了指標 void str sort char s,int n n代表指標陣列的長度...
C語言中指標的操作
c語言中指標操作主要有以下幾種 指標減去乙個整數 模擬上面的4。指標自減 模擬上面的5.求差值 通常對指向乙個陣列兩個不同元素的指標求差值,代表兩個元素位置的差值。示例 include int main void int ptr1,ptr2,ptr3 ptr1 urn ptr2 urn 2 prin...