Zi 字媒體
2017-07-25T20:27:27+00:00
一把梭系列 ~ 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
#include
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)
寫了
5860316篇文章,獲得
23313次喜歡