C 入門day05(指標)

2021-10-20 12:22:40 字數 3484 閱讀 5132

使用指標時,可以通過解引用的方式來找到指標指向的記憶體

指標前用星號 * 代表解引用,找到指標指向的記憶體中的資料

(網友說:& 和 * 是起相反作用的 兩個符號)

在32位作業系統下,指標占用4個位元組空間;64位 --> 8個位元組

(vs和dev編譯器都可以自己選擇用64位還是32位對**進行編譯)

空指標:指標變數指向記憶體中編號為0的空間

用途:初始化指標變數

注意:空指標指向的記憶體是不可以訪問的

記憶體編號 0~255 為系統占用記憶體,不允許使用者訪問

int * p = null;

*p = 100; // 會報錯,0~255 不能自己寫

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

總結:空指標和野指標都不是我們自己申請的空間,因為不要訪問,會報錯。
const修飾指標有三種情況:

int a =10;

int b =20;

int* p =

&a;

const int * p =

&a;

常量指標

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

比如:*p = 30; // 錯誤,指標指向的值不可以修改

p = &b; // 正確,指標指向可以修改

int * const p =

&a;

指標常量

特點:指標的指向不可以改,指標指向的值可以改

比如:*p = 30; // 正確,指標指向的值可以修改

p = &b; // 錯誤,指標指向不可以修改

const int * const p =

&a;

特點:指標的指向和指標指向的值都不可以修改

怎麼記:看到 * 就是指標,看到 const 就是「常量」(固定死、不可修改的意思)
**:

#include

using

namespace std;

// 定義指標

intmain()

執行結果:

指標 p 為:0x22fe34

a=:1000

*p=:1000

sizeof(int*)

= 8sizeof(int*)

= 8請按任意鍵繼續. .

.作用:利用指標訪問陣列中的元素

我有乙個疑問:

陣列的元素,乙個佔 4個位元組

(64位系統)指標占用 8 個位元組

當指標 偏移乙個單位時,不就是偏移8個位元組嗎?

為什麼 for 迴圈裡可以正常迴圈10次,正常輸出 所有陣列元素呢?

在q群裡問了網友,網友說:指標偏移指的是 它指向的物件 做偏移

有兩個網友的帖子可以參考一下

c語言指標偏移技巧

c語言中的指標加減偏移量

**:

#include

using

namespace std;

// 指標和陣列

intmain()

; cout<<

sizeof

(arr[0]

)

// 陣列名就是陣列的首位址

cout<<

sizeof

(int*)

int i =

0;i<

10;i++

) cout

("pause");

return0;

}

執行結果:

4

8所有元素:

1 2 3 4 5 6 7 8 9 10

請按任意鍵繼續. .

.

作用:利用指標作函式引數,可以修改實參的值

注意(網友說的):

位址傳遞同樣會開闢記憶體空間,資料型別就是指標變數

也就是說,除非指標指向了結構體,否則省記憶體就是無稽之談

值傳遞:  修改函式內部,但是不修改main
**:

#include

using

namespace std;

void

swap

(int a,

int b)

void

swap02

(int

* p1,

int* p2)

intmain()

執行結果:

值傳遞函式內部

a = 2

b = 1

值傳遞後 main

a = 1

b = 2

位址傳遞函式內部

a = 2

b = 1

位址傳遞後 main

a = 2

b = 1

請按任意鍵繼續. .

.

指標、陣列、函式

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

#include

using

namespace std;

// 氣泡排序函式

void

bubblesort

(int

* arr,

int len)

// int * arr 也可以寫成 int arr}}

}// 列印陣列

void

printarray

(int

* arr,

int len)

cout<}int

main()

;int len =

sizeof

(arr)

/sizeof

(arr[0]

);bubblesort

(arr,len)

;printarray

(arr,len)

;system

("pause");

return0;

}

執行結果:

1  2  3  4  5  6  7  8  9  10

請按任意鍵繼續. .

.

C 入門基礎Chapeter05指標

1 定義指標 int a 10 指標定義的語法 資料型別 指標變數名 int p 讓指標記錄變數a的位址 p a 輸出的為16進製制的位址 cout 指標p為 p endl 輸出結果為 指標p為 0079fbb0 2 使用指標 作用 可以通過解引用的方式來找到指標指向的記憶體 解引用 p 在指標的前...

C部落格作業05 指標

展示關於 指標題目集 分數截圖。每個知識點具體展開介紹。包括指標如何指向字串 字串相關函式及函式 原型的理解 字串相關函式用法 擴充套件課堂未介紹內容 具體格式是什麼,注意事項。為什麼要動態記憶體分配,堆區和棧區區別。動態記憶體分配相關函式及用法。舉例為多個字串做動態記憶體要如何分配。多個字串用二維...

C語言部落格05 指標

本章學習了指標的應用,指標是c語言中很有特色的乙個東西,其他的語言基本沒有這個功能,直接在記憶體上對變數賦值,同時也學到了很多函式可應用在字串中運用比如strlen strcat strcmp等等,對陣列的大小進行控制也學到了乙個新的方法,動態記憶體分配,可以對陣列的大小進行控制,防止像以前那樣給陣...