指標
講師:陳楷元
大綱
如果沒有指標
函式中改值
a=3 b=5
a=5 b=3
複製陣列
b: Hello
Error!
記憶體
參考自2021資芽指標ppt
教室裡有10種人
解讀2進位與16進位
A=10 D=13
B=11 E=14
C=12 F=15
不同數字系統間的轉換
bin
hex
dec
不同數字系統間的轉換
記憶體就像是陣列
| | | | |
| | | | |
0x00
0x02
0x01
0x03
0x04
0x05
0x06
0x07
0x08
0x09
陣列用index取值,
記憶體用16進位取值
變數宣告與記憶體
int a=5;
Step 1. 電腦找到可以用的格子
Step 2. 標記變數名稱
Step 3. 將值存入
| | | | |
| | | | |
0xff
a
5
變數操作與記憶體
a++;
Step 1. 電腦利用變數名稱找到對應記憶體
Step 2. 根據地址對該變數進行操作
| | | | |
| | | | |
0xff
a
5+1
變數名稱給人方便,
但電腦是根據記憶體做事
指標的操作
指標是什麼?
指標變數
不同變數值可能相同,
但位址必定不同
整理
NULL vs nullptr
宣告&初始化
* :(宣告時) 無意義,表後面是指標
(其他狀況) 取值
&:取位址
宣告&初始化
Ex1
| 取值 | 的值 | 取位址 |
| * | | & |
i | 無意義 | 5 | a |
iptr1 | 5 | a | b |
iptr2 | 5 | a | c |
Ex2
| 取值 | 的值 | 取位址 |
| * | | & |
i | 無意義 | 5 | a |
iptr1 | 5 | a | b |
iptr2 | a | b | c |
思考1
a=5
b=3
*ptr1=5
*ptr2=3
思考2
a=3
b=5
*ptr1=5
*ptr2=3
指標與陣列
指標陣列 vs 用指標存陣列
指標陣列
欲將v陣列元素歸零:
用指標存陣列
陣列名稱的值就是
陣列的起始位址,
即a=&(a[0])
用指標存陣列
用指標存陣列
指標存陣列,
指標可當成陣列用
欲將v陣列元素歸零:
用指標存陣列
指標當成陣列用,
可以跑,更好用
欲將v陣列元素歸零:
p++指的是讓p指向陣列中下一個元素,這裡是指加上sizeof(int)
課堂練習