C語言第六章 指標

2022-04-15 17:50:21 字數 2305 閱讀 7179

一,什麼是指標

2.其次要了解計算機的cpu和記憶體條之間的關係

3.指標的含義

二,指標的定義

1.指標變數的基本定義:

# includeint main(void

)

2.指標變數的解釋:

3.經典的指標程式:

互換兩個變數的值

# includevoid fun(int * p,int *q)

int main(void

)

三,一維陣列與指標的關係

1.一維陣列的名稱:

# includeint main(void);

printf(

"%#x %#x \n

",arr,&arr[0

]);

/*

*/return0;

}

2.一維陣列下標和指標的關係:

# includeint main(void);

int *p;

p = arr; //

p指向arr,因此p[i] == arr[i]

printf("

%d \n

",p[3

]);

int temp0 = *p; //

*p 表示的是陣列的第乙個元素

printf("

%d \n

", temp0);

int temp1 = *(p+1); //

*(p+1) 表示的是陣列的第二個元素

printf("

%d \n

", temp1);

//根據上面的結果我們推算出:arr[i] == *(p+i);

return0;

}

3.乙個函式處理乙個陣列用指標需要接收幾個引數:

4.指標變數的運算:

5.乙個指標變數佔幾個位元組:

# includeint main(void

)

四,動態記憶體與靜態記憶體

1.什麼是多級指標:

# includeint main(void

)

2.多級指標的理解:

3.傳統陣列的缺點:

4.為什麼需要動態記憶體:

5.什麼是動態記憶體:

6. malloc 函式

7. 動態記憶體分配示例

假設我們構造乙個長度為len的int型別的一維陣列。

int * p = (int *)malloc(len);

1. 這條語句分配了兩塊記憶體,一塊是長度為len的動態記憶體,一塊為靜態記憶體。並且這塊靜態記憶體是p變數本身所佔的記憶體,佔4個位元組(因為是乙個指標變數)。

2. malloc函式的功能是向系統申請len個位元組的記憶體空間,如果請求分配成功,則返回第乙個記憶體單元的位址,分配不成功則為null

3. malloc函式只能返回第乙個位元組的位址,所以我們需要把這個沒有實際含義的位址(俗稱幹位址)轉換成乙個有實際意義的位址,因此malloc函式前面必須加(資料型別 *),表示把這個無實際意義的位址轉          換成相應資料型別的位址,這樣我們的記憶體空間就會按照該資料型別進行劃分(例如:int *則會將這個len為100位元組的記憶體單元劃分成實際儲存25個int型別變數)。

4. 例如:int * p = (int *)malloc(100); 

表示將系統分配的100個位元組的記憶體空間的第乙個位址轉換成int型別的位址,由於int型別是佔4個位元組,所以此時的第乙個位元組的位址轉化成前四個位元組的位址。所以p指向的是第乙個4個位元組的位址,p+1則          是第二個4個位元組的位址,依次類推。。。申請的這個記憶體空間,可以存放25個int型別的變數。

8. free 函式

9. 動態記憶體和靜態記憶體的比較

第六章 指標

1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...

C語言 第六章

c語言 第六章 飄過的小牛 部落格頻道 csdn.net 一 變數儲存空間的分類順序 先宣告的變數後分配儲存空間 撤銷的順序與之相反 先建立的後撤銷。這種機制就稱為棧機制,好像往乙個只能允許進出乙個盤子的桶裡放盤子,先放進的後拿出。在c 語言程式中,區域性變數就被分配在棧區,而且是以高階為棧底建立的...

C和指標 第六章 指標

1.指標在進行間接訪問之前,確保已被初始化。否則,會給指標分配乙個非法位址,輕則報錯,重則在毫不相干的地方報錯 指標偶爾包含合法位址 2.為了測試乙個指標變數是否為null,你可以將它與零值進行比較 3.注意 指標變數可以作為左值使用,並不是因為它們是指標,而是因為它們是變數。間接訪問指定了乙個特定...