C語言基礎--指標和資料儲存
阿新 • • 發佈:2019-01-03
資料的訪問方式:
------------------------------------
直接訪問:直接訪問記憶體單元中的內容
間接訪問:通過 記憶體單元編號 或者 資料所佔位元組點數 訪問記憶體中的資料
char 1 1個記憶體單元
int 4個位元組 4個記憶體單元
short 2 2個記憶體單元
long 4或8 4或8個記憶體單元
float 4 4 個記憶體單元
double 8 8個記憶體單元
%p可以將地址打印出來
---------------------------
資料儲存
電腦記憶體:4G 8G 16G 1G = 1024M * 1024K * 1024B
位元組(byte):是最小的儲存單元,一個位元組被稱為一個儲存單元(記憶體單元),不同的資料型別所佔的儲存單元也不同
位(bit):一個位元組又可以劃分為8位
為了正確訪問記憶體單元,每個記憶體單元都有一個編號,記憶體單元的編號就是地址。
記憶體地址 = 地址 = 記憶體單元標號
記憶體單元中的資料才是我們關注的內容。
指標
指標是最常見的間接訪問。
指標就是記憶體地址,我們習慣把記憶體地址叫做指標,記憶體地址也可以簡稱為地址
&取址符 可以檢視一個變數的記憶體地址(記憶體首地址)
格式化輸出記憶體地址用%p
&符號取出來的記憶體地址,只是變數的記憶體首地址,並不是變數只佔這一個記憶體地址,變數的資料型別決定變 量佔得幾個記憶體地址。
---------------------------
指標變數
概念:存放記憶體地址的變數
格式:基本資料型別 *變數名 = 記憶體地址;
*取值操作符
我們通過*來訪問記憶體單元中的儲存的值
注意:*是取值操作符, &是取址操作符
指標的重指向
指標變數的賦值意味著重新指向,而不是同時指向多個地址
如例
指標的型別 定義指標型別要與取址變數的型別一致 指標變數所佔的位元組 指標變數所佔的位元組大小取決於作業系統的位數,64位的系統,指標變數的大小為8;32位的是4. 特別注意: 指標變數的大小(所佔位元組)只與作業系統的位數有關 特別注意: 1、如果出現*號的地方,前邊有型別修飾符:int、float..,此時*號僅僅起到標示作用,即告訴編譯器,這僅僅是一個指標變數 2、 如果出現*號的地方,前邊沒有型別修飾符,此時*號代表取值操作符,會把指標指向的區域中的內容取出來 3、 如果前邊沒有*號或者任何的型別修飾符。那這個變數就是一個指標變數,它裡邊儲存著某一個記憶體地址。 //指標賦值 C語言允許使用賦值運算子對指標進行賦值,前提是兩個指標具有相同的資料型別。 傳值和傳址 在傳參過程中,形參會拷貝實參的值。 ------------------------------------------ 指標與陣列在C語言中,陣列是構造型別,系統會分配一段連續的記憶體空間,來儲存陣列的全部資料;其中陣列名代表陣列首個元素的地址
&array == &array[0];恆等於;指標變數p與array相同,都指向陣列的首地址(第一個元素的地址) 指標可以做為陣列名使用 指標與陣列的區別
1、所佔空間不同
-指標:只與作業系統有關
-陣列:與元素個數和型別有關
2、陣列名是常量地址,不能被賦值不能重定向
3、指標可以重定向
結構體指標變數指向的是結構體變數的首地址,也就是結構體第一個成員的地址。 結構體陣列與指標的關係 結構體陣列的 陣列名 是一個結構體 指標 常量
int a = 110;
printf("a的記憶體地址:%p\n",&a);
注意:int a =3, b = 5;
int *p = &a;
p = &b;
printf("%p %p\n", &a, &b);
printf("%p %d\n", p, *p);
指標的型別 定義指標型別要與取址變數的型別一致 指標變數所佔的位元組 指標變數所佔的位元組大小取決於作業系統的位數,64位的系統,指標變數的大小為8;32位的是4. 特別注意: 指標變數的大小(所佔位元組)只與作業系統的位數有關 特別注意: 1、如果出現*號的地方,前邊有型別修飾符:int、float..,此時*號僅僅起到標示作用,即告訴編譯器,這僅僅是一個指標變數 2、 如果出現*號的地方,前邊沒有型別修飾符,此時*號代表取值操作符,會把指標指向的區域中的內容取出來 3、 如果前邊沒有*號或者任何的型別修飾符。那這個變數就是一個指標變數,它裡邊儲存著某一個記憶體地址。 //指標賦值 C語言允許使用賦值運算子對指標進行賦值,前提是兩個指標具有相同的資料型別。 傳值和傳址 在傳參過程中,形參會拷貝實參的值。 ------------------------------------------ 指標與陣列在C語言中,陣列是構造型別,系統會分配一段連續的記憶體空間,來儲存陣列的全部資料;其中陣列名代表陣列首個元素的地址
&array == &array[0];恆等於;指標變數p與array相同,都指向陣列的首地址(第一個元素的地址) 指標可以做為陣列名使用 指標與陣列的區別
1、所佔空間不同
-指標:只與作業系統有關
-陣列:與元素個數和型別有關
2、陣列名是常量地址,不能被賦值不能重定向
3、指標可以重定向
結構體指標變數指向的是結構體變數的首地址,也就是結構體第一個成員的地址。 結構體陣列與指標的關係 結構體陣列的 陣列名 是一個結構體 指標 常量