1.運算子 &
位址的大小是否與int相同取決於編譯器。32位是4位元組,64位是8位元組。
因此位址的輸出不能是%x, 應該是%p。
2.指標
int i;
int* p =
&i;int
* p,q;
int*p,q;
3.指標作函參
訪問這個位址上的變數需要使用到單目運算子*,接著可以通過指標使用和改寫這個變數。
int i =10;
f(&i);
voidf(
int*p)
最終k = 10, i = 114.指標的應用
場景一:函式需要返回多個值,某些只能通過指標返回。傳入的引數實際上是需要儲存帶回的結果的變數。如交換兩者的值:
int a =5;
int b =
6;
void
swap
(int
*pa,
int*pb)
場景二:分開返回。函式返回運算的狀態,結果通過指標返回。
5.指標中的常見錯誤
6.指標與陣列
inta[ ] <==>int* const a7.指標與constinta[5], b[5];
a = b;
//這是不能實現的
指標是const,表示指標一旦得到某個變數的位址後不能再指向其他變數。可以理解為不能再改變指標p的值,但可以改變*p的值。
int* const q = &i; // q是const*p是const,表示不能通過這個去修改所指的變數。注意在這裡指標和指向變數都不是const。*q = 26; // ok
q++; // error
const int *p = &i;*p = 26; // error (*p是const)
i = 26; // ok
p = &j; // ok
int *const p1 = &i;const int *p1 = &i;
int const *p1 = &i;
void f(const int *x)8.指標運算這樣既能用較少的位元組數傳遞值給引數,又能避免函式對外面的變數的修改
9.指標比較
10.指標的型別
11.動態記憶體分配
int
*a =
(int*)
malloc
(n*sizeof
(int
);
n為資料個數(陣列大小),這裡是以位元組為單位來分配空間的,a可以當做陣列來用。標頭檔案#include
void* malloc(size_t size),因為返回型別為void*,所以要加上相應的型別強制轉換。
申請的空間是以位元組為單位的。
在申請完空間之後要釋放。
free (a)
;
把申請的空間還給系統,與malloc一起使用。
只能還申請來的空間的首位址。
c語言指標學習筆記
example 1 int a,b,p,q p a p a p q b p p a 錯誤,因為p實際上是乙個位址,而a是乙個整型值 p q 錯誤,因為這句話的意思是 將位址q指向的單元的值賦給位址p。而實際上p是乙個位址,是不能存值得 p a 錯誤 注意,如果這樣定義了 p,那麼 p表示位址 指標 ...
C 語言指標學習筆記
前敘 原先對c語言的學習,對指標有恐懼感.當c語言學到一定的程度的時候,再學習指標有種水到渠成的感覺。對指標變數的定義包括三個內容 1 指標型別說明,即定義變數為乙個指標變數 2 指標變數名 3 變數值 指標 所指向的變數的資料型別 一般是這樣的 型別說明符 變數名 int p 這個小星星號 表示這...
C語言指標學習筆記
假設我們定義乙個指標p。那麼會經常使用到三個符號 1,p 2,p 3,p 我們知道,p是乙個指標變數的名字,表示此指標變數指向的記憶體位址,如果使用 p來輸出的話,它將是乙個16進製制數。而 p表示此指標指向的記憶體位址中存放的內容,一般是乙個和指標型別一致的變數或者常量。而我們知道,是取位址運算子...