https://programming.im.ncnu.edu.tw/Chapter9.htm
int b;
//跟記憶體要一塊區域稱為b,這塊區域專門放int型變數值
b = 2;
//把2這個值給變數b
int* pointer;
//跟記憶體要一塊區域稱為pointer,這塊區域專門放指向int型變數的指標(地址)
pointer = &b;
//把變數b的地址值給pointer,注意不能寫成 pointer = b;*pointer = 100
這裡的「*」,和宣告指標變數的 int* pointer 的意義不太一樣。反而是和「&」相對應——「&」代表「取出地址」、「*」代表「取出內容」
//指標宣告與存取
#include <stdio.h>
int main(void) {
int b = 2;
int* pointer = &b;
printf("變數 b 的值:%d\n", b);
printf("變數 b 的地址16進制:%p\n", &b);
printf("變數 b 的地址10進制:%d\n", &b);
printf("pointer 的值16進制:%p\n", pointer);
printf("pointer 的值10進制:%d\n", pointer);
printf("\n"); //換行
*pointer = 100; //此*等同&,是取值
printf("*pointer 的值:%d\n", *pointer);
printf("變數 b 的值:%d\n", b);
printf("變數 b 的地址16進制:%p\n", &b);
printf("變數 b 的地址10進制:%d\n", &b);
printf("pointer 的值16進制:%p\n", pointer);
printf("pointer 的值10進制:%d\n", pointer);
printf("\n");
printf("變數 pointer 的地址:%p\n", &pointer);
printf("變數 pointer 的地址:%d\n", &pointer);
return 0;
}
測試結果~
變數 b 的值:2
變數 b 的地址16進制:000000000062FE1C
變數 b 的地址10進制:6487580
pointer 的值16進制:000000000062FE1C
pointer 的值10進制:6487580
*pointer 的值:100
變數 b 的值:100
變數 b 的地址16進制:000000000062FE1C
變數 b 的地址10進制:6487580
pointer 的值16進制:000000000062FE1C
pointer 的值10進制:6487580
變數 pointer 的地址:000000000062FE10
變數 pointer 的地址:6487568
程式例題~G:\我的雲端硬碟\c語言練習題\1資料型態宣告\10指標宣告存取
//指標宣告存取
#include <stdio.h>
int main(void) {
int a=7,res=0;
int *addra=&a; //指標addr放a的記憶體位置
res=*addra; //res 放addr位置的內容
printf("a的內容=%d\t",a);
printf("a的記憶體位置=%d\t",addra);
printf("res的內容=%d\t",res);
printf("res的內容=%d\n",*addra);
*addra=10; //由記憶體位置改變數a內容
printf("a的內容=%d\t",a); //a=10
printf("a的記憶體位置=%d\t",addra);
printf("res的內容=%d\t",res); //res未更改記憶體位置的新內容 7
printf("res的內容=%d\n",*addra); //記憶體位置=10
res=*addra; //res更改記憶體位置的新內容 10
printf("res的內容=%d\n",*addra);
}
測試結果~
a的內容=7 a的記憶體位置=6487564 res的內容=7 res的內容=7
a的內容=10 a的記憶體位置=6487564 res的內容=7 res的內容=10
res的內容=10
https://kopu.chat/2017/05/15/c%E8%AA%9E%E8%A8%80-%E8%B6%85%E5%A5%BD%E6%87%82%E7%9A%84%E6%8C%87%E6%A8%99%EF%BC%8C%E5%88%9D%E5%AD%B8%E8%80%85%E8%AB%8B%E9%80%B2%EF%BD%9E/
沒有留言:
張貼留言