C語言中指標的15個問題

2021-06-19 06:14:55 字數 1775 閱讀 2708

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...