C 基礎入門詳細筆記(二)

2021-10-05 12:44:47 字數 4166 閱讀 1350

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...