#include intmain()
指標 = 指標變數型別 + 指標變數 + 同型別變數的位址賦值
說明
- int i = 3 宣告了乙個int型別的i變數,並賦值了3這個值
- int * p 宣告了乙個int指標型別 的 p指標變數,注意不是*p!!!, int * 表示這是乙個int指標型別
- &i 表示取這個i變數的位址,變數的位址也是乙個值
- int * p = &i 表示把 i變數的位址賦值給p指標變數【指標就是位址】
- *p 表示通過存放的&i位址訪問i變數儲存的值,也就是說 *p == i 這個意思
注意事項:
- 不要把i變數直接賦值給p,兩者的型別就不一樣,乙個是int型別的變數,乙個是int指標型別的變數
- 也不要把值直接賦值給p,原因同上
- 當&i賦值給了p,也就是說p儲存了i的位址,因此,p指向了i
- 指標變數,是乙個只能存放同型別的變數位址的位址變數
- 指標和位址是同樣的乙個涵義
- *指標變數 完全等同於 普通變數,所有 *p 的地方 都可以 替換 i,反之也可以
指標的用途:
- 表示複雜的資料結構
- 快速傳遞資料
- 函式的返回值可以返回多個值
- 直接訪問硬體
- 方便的處理字串
- 是理解物件導向語言的基礎
總結:指標是c語言的靈魂所在!!
指標的定義:
- 什麼是位址?
位址是記憶體單元的編號
從0開始的非負整數
範圍:4g記憶體 230 * 22 = 4gb - 1
- 什麼是指標?
指標就是位址,位址就是指標
指標變數就是存放記憶體單元編號的變數
指標和指標變數是兩個不同的概念
指標的本質是乙個操作受限的非負整數,可以相減操作,不可加乘除
錯誤型別示範:
#include intmain()
宣告乙個int指標型別變數p 但是,不為p賦值任何的變數位址,此時的p則是乙個野指標,會指向記憶體中任意乙個記憶體單元
*p = i 是把i變數的值 3 賦值給指標變數p所指向的未知記憶體單元變數,這個行為是非常危險的!!!
intmain()
- 宣告int型別變數i並賦值3,宣告int指標型別p和q
- p指標變數 指向 i變數的位址
- *q 指向 p指標變數,這是乙個語法錯誤,*p能訪問或者賦值的是乙個int型別變數的值或者字面量,但是p是乙個int指標型別,所以型別不匹配報錯
- 如果改成 *q = *p ,這就回到上面的錯誤了,q指標變數又是乙個野指標,指向乙個未知的記憶體單元,並賦值i變數
- 如果改成 p = q, 那就是把q指標變數指向的未知記憶體單元,賦值給p指標變數,*q則會讀取這個未知記憶體單位存放的值
郝斌C ST 指標 swap問題
在主函式種實現變數的交換 現在我們把這交換的行為封裝進方法中 swap函式確實進行了交換,列印也是10和5了,但是下面a和b的結果還是5和10 形參i 和 形參j 並不是和 a,b乙個變數,實參 a,b 傳遞值給形參 i,j 形參i 和 形參j 還有temp變數,在記憶體也分配了空間,main函式跳...
郝斌老師 資料結構入門 之快速排序
include void quicksort int int,int int findpos int int,int 主要思想 通過移動和賦值的方式確定第乙個元素的最終位置,然後在用同樣的方法分別確定第乙個元素的最終位置的左邊一部分和右邊一部分的第乙個元素的最終位置,以此類推 intmain voi...
郝斌資料結構自學筆記 5 預備知識 指標
5 預備知識 指標 2 指標的重要性 指標是c語言的靈魂 定義 cpu 位址線,控制線,資料線 記憶體 指標 指標就是位址,位址就是指標。指標變數是存放記憶體單元位址的變數。指標的本質是乙個操作受限的非負整數。分類 1.基本型別的指標 2.指標和陣列的關係 變數並不一定連續分配,隨機分配記憶體。記憶...