一把梭系列 ~ C語言範例 (0016) [指標變數的位址與運算]
一把梭系列 ~ C語言範例 (0016) [指標變數的位址與運算]
資料來源: https://openhome.cc/Gossip/CGossip/Pointer.html
https://openhome.cc/Gossip/CGossip/PointerArithmetic.html
線上執行: https://www.tutorialspoint.com/compile_c_online.php
★前言:
★主題:
程式語言變數提供具名稱的記憶體儲存空間,一個變數關聯『一個資料型態』、『儲存的值』與『儲存空間的位址值』。
01.取址運算子(Address-of operator)
如果想知道變數的記憶體位址,可以使用 & 取址運算子(Address-of operator),例如:
int n = 10; printf("變數 n 的資料型態:int\n"); printf("變數 n 儲存的值:%d\n", n); printf("變數 n 記憶體位址:%p\n", &n);
02.宣告指標變數
一般變數儲存的內容都是數值,而指標變數的儲存的值為某一個記憶體位址值,其宣告方法如下:
//資料型態△*變數名稱01,*變數名稱02; //資料型態*△變數名稱01; //△是英文空格 int *n,*m; float* f; char *c;
03.設定指標變數內容與取出儲存位址處之值
int n = 10; int *p='\0' ; printf("p 初始化儲存的位址:%p\n", p); printf("n 的位址:%p\n", &n); p=&n;//把n的的記憶體為只取出存放到指標變數中 printf("p 儲存的位址:%p\n", p); printf("取出 p 儲存位址處之值:%d\n", *p);
04.指標的運算
除了指定運算子=、取址運算子 & 與取值運算子 * 之外,還有 +、-、++、–、+= 與 -= 等運算子可以使用在指標上。
指標的加法與減法與一般數值的加減法不同,在指標運算上加 1 ,是表示前進『一個資料型態的記憶體長度』,例如
int *p1='\0' ; float f=0; float *p2='\0'; printf("p1 位址:%p\n", p1); printf("p1 + 1:%p\n", p1 + 1); printf("p1 + 2:%p\n", p1 + 2); p2=&f; printf("p2 位址:%p\n", p2); printf("p2 - 1:%p\n", p2 - 1); printf("p2 - 2:%p\n", p2 - 2);
★code:
#include <stdio.h> #include <stdlib.h> int main() { //取址運算子(Address-of operator) int n = 10; printf("變數 n 的資料型態:int\n"); printf("變數 n 儲存的值:%d\n", n); printf("變數 n 記憶體位址:%p\n\n", &n); //設定指標變數內容與取出儲存位址處之值 int *p='\0' ; int* p3; printf("p 初始化儲存的位址:%p\n", p); printf("n 的位址:%p\n\n", &n); p=&n;//把n的的記憶體為只取出存放到指標變數中 p3=p; printf("p 儲存的位址:%p\n", p); printf("取出 p 儲存位址處之值:%d,%d\n\n", *p,*p3); //指標的運算 int *p1='\0' ; double d=0; double *p2; printf("p1 位址:%p\n", p1); printf("p1 + 1:%p\n", p1 + 1); printf("p1 + 2:%p\n\n", p1 + 2); p2=&d; printf("p2 位址:%p\n", p2); printf("p2 - 1:%p\n", p2 - 1); printf("p2 - 2:%p\n\n", p2 - 2); //記憶體大小 printf("整數變數記憶體大小:%d\n", sizeof(int)); printf("倍精度變數記憶體大小:%d\n", sizeof(double)); printf("整數變數指標記憶體大小:%d\n", sizeof(int*)); printf("倍精度變數指標記憶體大小:%d\n", sizeof(double*)); return 0; }
★結果:
★延伸說明/重點回顧:
01.一個變數關聯『一個資料型態』、『儲存的值』與『儲存空間的位址值』三項數值
02.一般變數和指標變數的差異只在於『儲存的值』內的資料內容,一般變數儲存普通數值,指標變數儲存一般變數的記憶體位址
03.一般變數的配置記憶體大小由型態決定,指鰾變數配置記憶體大小由編譯器位元數決定(x32編譯器->4byte ; x64編譯器->8byte)
One thought on “一把梭系列 ~ C語言範例 (0016) [指標變數的位址與運算]”
YOUTUBE URL: https://youtu.be/o1198jVVUyg