2.空指標、void指標
3.指標和引用
4.指標和陣列
《老九學堂c++課程》《c++ primer》學習筆記。《老九學堂c++課程》詳情請到b站搜尋《老九零基礎學程式設計c++入門》
-------------簡單的事情重複做,重複的事情用心做,用心的事情堅持做(老九君)---------------
指標是乙個值為記憶體位址的變數(資料物件)。也就是說指標它一樣是乙個變數,只不過該變數中存放的是另乙個物件的記憶體位址,存放另乙個物件的位址的操作又叫指向了該物件。
(位址是與作業系統程序有關,都不一樣。)
1.變數名–位址的助記符
2.定義指標時不賦初值,指標叫野指標。強烈建議初始化所有指標,並在可能的情況下,盡量等定義了變數之後再定義指向它的指標.
3.指標指向的物件可以改變(可以通過賦值–去位址符號改變指標的內容)
4.特定型別的指標只能存放該型別物件的位址
5.指標沒有釋放可怕
資料型別 * 指標變數名 // 定義乙個指向(資料型別)變數的指標星號靠前靠後都是定義指標型變數,只是在多個連續定義的時候需要注意int *ptr_num;
int *ptr_name;
int *money_ptr;
double *p_price;
int* a,b,c; //只有a為指向int 型別變數的指標,b、c是一般的int 型變數注意1:推薦將*靠後結合;int *a, *b, *c; //定義了3個指向int 型別變數的指標
int year;–作用於乙個指標變數,取變數中的位址,然後對該位址對應的記憶體空間進行操作year = 2021; // year 所對應的變數塊中存放這2021,這個變數塊實際是通過其對應的位址找到它的
int *ptr_year; // 定義了乙個指標變數
ptr_year = &year; // 將變數year的位址出來賦給指標變數,怎麼稱呼ptr_year:說的是ptr_year指向了year這個變數
int num = 1024;注意2:宣告中使用 * 和 後續使用*效果完全不一致;int *ptr_num;
ptr_num = #
*ptr_111; //等價於 num = 111;
demo1:指標的一般使用
int
main()
輸出:
ptr_num 的值: 0x7ffee273f630
0x7ffee273f630
ptr_num指向空間的值: 1024.5
demo2:字元指標在輸出時候的注意事項
int
mian()
不指向任何物件的,用來初始化指標,避免出現野指標。在試圖使用乙個指標前可以檢查它是否為空。
int *ptr1 = nullptr; // nullptr 字面值常量 =0, 可以被轉換成任何型別的指標也等價於int *ptr2 = 0;
# include一種特殊的指標型別,可以存放各種型別變數的位址int *ptr3 = null
demo
int
main()
物件的乙個別名,使用引用訪問變數時直接用引用名就可以了,不需要和指標一樣用*。
引用只能繫結在物件上,不能與字面值或者某個表示式的計算結果繫結在一塊。
引用都必須初始化,所以引用使用之前不需要測試其有效性。
指標賦值時的& 符號會驗證位址是否有效(編譯器內部機制?)而引用更不需要,所以引用使用起來效率更高。
int int_val =
1024
;int
& refvalue = int_val; # 定義了變數int_val的引用refvalue
一般情況下常量的引用是錯的,但是如果一定要定義乙個常量的引用給可以使用const
double ref =
100.0
;//❌]
const
double ref =
100.0
;//☑️
引用和指標的關係
1.引用是對指標進行了簡單的封裝,底層仍然是指標。
2.引用在獲取位址時,編譯器內粗會進行* 操作。
c++提倡使用引用,而少用*
int num =
108;
int& rel_num = num;
rel_num =
118;
cout <<
&num <<
'\t'
<<
&rel_num << endl;
輸出
0x7ffee750f60c
0x7ffee750f60c
陣列資料是一塊連續的記憶體位址,陣列名就是這塊連續記憶體空間的首位址
(但是實際上資料名對應的資料型別為double[5] 所有用sizeof 輸出時就顯示原型了)
int
main()
;double
*ptr_score = score;
//不需要取位址符號
cout <<
sizeof
(score)
<<
'\t'
<<
sizeof
(ptr_score)
<< endl;
cout << ptr_score[2]
<< endl;
return0;
}
40
833
int
main()
;double
*ptr_score = score;
for(
int i =
0; i <
5; i++
)return0;
}
int num[50]
;//num陣列名,也可以理解成陣列的首位址
// num的值和&num[0] 的值一致
// 陣列第i+1個元素可以表示為: num[i+1] 或者 *(num+i+1)
// 為指向陣列的指標賦值
int*ptr_num = num;
int*ptr_num =
&num[0]
;//指標變數也可以指向陣列元素
int*ptr_num =
&num[4]
int*ptr_num = num +
4
C9 高階指標
一 指標變數的定義和使用 二 取值運算子 三 取值運算子 四 指標的算術運算 typedef struct student student typedef struct cpoint cp typedef struct teacher teacher 命名 全大寫 或 k 駝峰命名法typedef ...
C語言基礎(9) 指標
指標與陣列 指標變數定義的一般形式 型別 指標變數名符號 在變數宣告語句中是指標型別說明符,前面的型別用於宣告指標可以指向哪種型別的變數,稱為指標的基型別。例如 int pt1 int pt2 int a 520 int pt a 用 運算子可以獲取指標變數所指向變數的內容,該運算子被稱為指標變數間...
實驗9 指標1
1 程式填空 下列程式在陣列中同時查詢最大元素和最小元素的下標,分別存放在 main 函式的max 和 min 變數中。要求 根據執行結果分析程式和填空,並注釋說明填充依據。include void findbypoint int int,int int void find int a,int n,...