C 入門基礎Chapeter05指標

2021-09-26 15:21:52 字數 2489 閱讀 8728

1、定義指標

int a = 10;

//指標定義的語法:資料型別 * 指標變數名;

int* p;

//讓指標記錄變數a的位址

p = &a;

//輸出的為16進製制的位址

cout << "指標p為:" << p << endl;

//輸出結果為:

指標p為:0079fbb0

2、使用指標

作用:可以通過解引用的方式來找到指標指向的記憶體

解引用:*p(在指標的前面加 』 *』 ),找到指標指向的記憶體的資料

*p = 1000;

cout << "a = " << a << endl;

cout << "*p = " << *p << endl;

輸出結果為:

a = 1000

*p = 1000

3、指標所占用空間

占用空間:

1)在32位作業系統下:占用4個位元組空間

2)在64位作業系統下:占用8個位元組空間

3)編譯時的作業系統更改方式:解決方案平台上將x86改為x64

int a = 10;

int* p = &a;

//以下兩個輸出結果相同

//原理:變數p的型別就是int*,sizeof()所輸出的就是此指標所占用空間

cout << "sizeof(int*) = " << sizeof(int*) << endl;

cout << "sizeof(int*) = " << sizeof(p) << endl;

輸出結果為:sizeof(int*) = 4

2)注意:空指標是不可以進行訪問的

//0~255之間的記憶體編號是系統占用的,因此不可以訪問

//此時若是輸入:*p = 100; 便會發生編譯錯誤

5、野指標:指標變數指向非法的記憶體空間

int* p = (int*)0x1100;

cout << *p << endl;

注意:空指標和野指標都不是我們申請的空間,因此不要訪問

6、const修飾指標

int a = 10;

int b = 10;

有三種情況:

1)const修飾指標—常量指標

//特點:指標的指向可以修改,但是指標指向的值不可更改

const int* p = &a;
2)const修飾常量—指標常量

//特點:指標的指向不可以修改,但是指標的值可以改

int* const p = &a;
3)const既修飾指標,又修飾常量

//特點:指標的指向、指標的值都不可修改

const int* const p = &a;
7、指標和陣列

int arr[10] = ;

cout << "第乙個元素:" << arr[0] << endl;

//利用指標訪問陣列中的元素

int* p = arr;//陣列名就是陣列的首位址

cout << "利用指標訪問第乙個元素:" << *p << endl;

p++;//指標向後偏移4個位元組

cout << "利用指標訪問第二個元素:" << *p << endl;

cout << "利用指標遍歷陣列:" << endl;

int* p2 = arr;

for (int i = 0; i < 10; i++)

8、指標和函式

1)值傳遞(傳入的引數,實參不變)

2)位址傳遞(傳入的引用引數/指標的位址,實參改變)

void swap02(int *p1, int *p2) 

void main()

9、指標、陣列、函式結合例項

問題描述:封裝乙個函式,利用氣泡排序,實現對整型陣列的公升序排序

例如陣列:

//氣泡排序函式

void bubblesort(int* arr, int len)

} }}//列印陣列

void printarray(int * arr,int len)

}void main()

; //陣列長度

int len = sizeof(arr) / sizeof(arr[0]);

bubblesort(arr, len);

printarray(arr, len);

//卡住程式(一般不使用,記憶體開銷大,可移植性差)

system("pause");

}

C 入門基礎學習總結Chapeter01

此工程使用的是vs2019進行學習和使用的 一 首先檔案 新建 專案 二 開啟頁面之後預設的建立之後輸出 hello world 三 進入 部分的學習 1 輸出 在c 程式中輸出一般使用 cout 輸入則是使用 cin 需要注意的是,輸入輸出流都需要引用命名空間std。示例1 using names...

C 入門基礎Chapeter03(函式 陣列)

一 陣列 ps vs2019中是不支援陣列長度是變數的 部分編譯器可行 陣列宣告示例 const int n 100 int num n 1 陣列定義 int num ps 以上的 看似混合了很多種型別,好像會報錯,但是其實並不會報錯,原因是 在c 中字元型和bool型都是用整型表示的。2 初始化一...

C 入門基礎Chapeter07結構體練習題

1 設計乙個英雄的結構體,包括姓名,年齡,性別 建立結構體陣列,陣列中存放5名英雄 通過氣泡排序的演算法,將陣列中的英雄按照年齡進行公升序排列,最終列印排序後的結果。include using namespace std 設計乙個英雄的結構體 struct hero 通過氣泡排序進行公升序排序 vo...