c++基礎入門詳細筆記(一)
c++基礎入門詳細筆記(二)
c++基礎入門詳細筆記(三)
c++基礎入門詳細筆記(四)
c++基礎入門詳細筆記(五)
c++基礎入門詳細筆記(六)
目錄
四、指標
1、空指標
2、void*指標
3、引用
4、指標和引用
5、指標和陣列
6、指標的算數運算
6.1、指標的遞增和遞減(++、--)
6.2、指標加上或減去某個整數值
7、陣列與指標小結
7.1、一維陣列與指標
7.2、二維數值與指標
8、動態分配記憶體
8.1、使用new分配記憶體
8.2、使用delete釋放記憶體
9、動態分配陣列
9.1、使用new建立動態分配的陣列
9.2、使用delete釋放記憶體
9.3、程式的記憶體分配
10、總結
int *ptr_year;
ptr_year=&year; //&year表示取位址
注意:
1. int* p的寫法偏向於位址,即p就是乙個位址變數,表示乙個十六進製制位址
2. int *p的寫法偏向於值,*p是乙個整形變數,能夠表示乙個整型值
3. 宣告中的*號和使用中的*號含義完全不同
example:
#include using namespace std;
int main()
> 結果輸出:0x6dfeeb a
(void *):任意型別指標
空指標不指向任何物件,在試圖使用乙個指標之前可以首先檢查是否為空
用法
int *ptr1 = nullptr;//等價於int *ptr1 = 0;
int *ptr2 = 0; //直接將ptr2初始化為字面常量0
//需要包含#include 標頭檔案
int *ptr3 = null; //等價於int *ptr3=0;
1. (void*)指標存放乙個記憶體位址,位址指向的內容是什麼型別不能確定
2. (void*)型別指標一般用來:拿來和別的指標比較、作為函式的函式的輸入和輸出;賦值給另乙個(void*)指標
int int_value = 1024;
//refvalue指向int_value,是int_value的另乙個名字
int& refvalue = int_value;
//錯誤:引用必須被初始化
int& refvalue2;
注:
double & ref = 100; //錯誤
const double & ref = 100; //正確
引用並非物件,只是為乙個已經存在的物件起的別名
int &ref_value = 10; //錯誤
引用必須初始化,所以使用之前不需要測試其有效性,因此使用引用可能會比使用指標效率高
int * num = &abc; //引用
1. 引用對指標進行了簡單封裝,底層仍然是指標
2. 獲取引用位址時,編譯器會進行內部轉換
3.引用比指標效率高
int num = 108;
int& rel_num = num;
rel_num = 118;
cout << &num << '\t' <<&rel_num 《轉換為:
int num = 108;
int* rel_num = #
*rel_num = 118;
cout << &num << '\t' <陣列:
1. 儲存在一塊連續的記憶體空間中
2. 陣列名就是這塊連續記憶體空間的首位址
#include using namespace std;
int main()
;//陣列型別-->double[5]
double * ptr_score = score;
//陣列名就是這塊連續記憶體空間的首位址
//cout << score << endl; //輸出為位址值
cout << sizeof(score) << ''\t' 《結果:40 4
int i;
double score[5] ;
double * ptr_score;
ptr_score = score;
for(i=0;i<5; i++)
輸出:
0x6dfec0
0x6dfec8
0x6dfed0
0x6dfed8
0x6dfee0
注:乙個型別為t的指標的移動,以sizeof(t)為移動單元。因為score是double型別,所以每次移動8個位元組空間
int i;
double score[5] ;
double * ptr_score;
ptr_score = &score[1]; //取第乙個資料的位址
ptr_score +=2; //取第三個資料的位址
cout << (void*)ptr_score++ << endl;
ptr_score -=3; //取第乙個資料的位址
cout << (void*)ptr_score++ << endl;
結果:
0x6dfed8
0x6dfec8
&num[i+1]
num+i+1
第i+1個元素的值:
num[i+1]
*(num+i+1)
*++ptr_num
int * ptr_num = num;
int * ptr_num = &num[0];
int * ptr_num = &num[4];
int * ptr_num = num + 4;
*(a[1]+2); //表示a[1][2]
*(*(a+1)+2); //表示a[1][2]
example1:
#include using namespace std;
int main()
cout << endl;
}return 0;
}
輸出結果:
9966960,9992840,0,
0,0,0,
0,0,0,
0,0,555,
0,0,0,
example2:
#include using namespace std;
int main()
, ,,,
,};
int (*p2)[3] = arrays;
for(int i = 0; i<5; i++)
cout << endl;
}//輸出每個元素的位址
cout << &arrays[1][0] << endl;
for(int i = 0; i<5; i++)
1、指標是乙個變數,儲存另乙個變數(物件)的記憶體位址
2、指標的宣告由基本型別、星號(*)和變數名組成
3、為指標賦值,賦值運算符號右側必須是乙個位址
4、運算子*用於返回指標指向的記憶體位址中儲存的值
5、使用指標訪問一維陣列和二維陣列的元素
int num = 4;
int* p_num = #//取num所在的位址值
*p_num = 112; //指向num的值變為112
C 基礎入門詳細筆記(四)
c 基礎入門詳細筆記 一 c 基礎入門詳細筆記 二 c 基礎入門詳細筆記 三 c 基礎入門詳細筆記 四 c 基礎入門詳細筆記 五 c 基礎入門詳細筆記 六 目錄 六 內聯函式 1 定義 2 使用內聯特性 二取一 3 小結 3.1 不要返回區域性變數的引用 3.2 函式可以不返回值,預設返回傳入的引用...
C 基礎入門詳細筆記(六)
c 基礎入門詳細筆記 一 c 基礎入門詳細筆記 二 c 基礎入門詳細筆記 三 c 基礎入門詳細筆記 四 c 基礎入門詳細筆記 五 c 基礎入門詳細筆記 六 目錄 十 建構函式 1 建構函式定義 1.1 特點 1.2 作用 1.3 建構函式的種類 2 帶參構造 2.1 定義 十 一 棧記憶體與堆記憶體...
C 入門(詳細)
using system namespace program 1.值型別 直接把資料存在記憶體棧上面 c 中很多內鍵型別都是值型別 如 int system.int32的簡寫 float system.single bool system.boolean的簡寫 值型別的資料都是繼承system.va...