一,什麼是指標
2.其次要了解計算機的cpu和記憶體條之間的關係
3.指標的含義
二,指標的定義
1.指標變數的基本定義:
# includeint main(void2.指標變數的解釋:)
3.經典的指標程式:
互換兩個變數的值
# includevoid fun(int * p,int *q)三,一維陣列與指標的關係int main(void
)
1.一維陣列的名稱:
# includeint main(void);2.一維陣列下標和指標的關係:printf(
"%#x %#x \n
",arr,&arr[0
]);
/*
*/return0;
}
# includeint main(void);3.乙個函式處理乙個陣列用指標需要接收幾個引數: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;
}
4.指標變數的運算:
5.乙個指標變數佔幾個位元組:
# includeint main(void四,動態記憶體與靜態記憶體)
1.什麼是多級指標:
# includeint main(void2.多級指標的理解:)
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.注意 指標變數可以作為左值使用,並不是因為它們是指標,而是因為它們是變數。間接訪問指定了乙個特定...