* 1. 指標變數一開始宣告時,同時沒有給予某物體的地址時,
* 之後再給予指標變數地址,不用在左側寫*星號
* 2. 程式碼中的星號,在非宣告時皆為「取值運算子」
* 3. 參照變數一定要在宣告實同時給予地址, 和指標變數不同,指標變數可以事後給予指定地址
*/
#include <iostream> #include "main.h" using namespace std; void S0703(void) { int Num1 = 100, Num5 = 77; float Num2 = 3.14f; char ch = 'A'; int *ptr1; // '*' 宣告指標, 有地址卻沒東西 float *ptr2; char *ptr3; ptr1 = &Num1; // '&' 取位址的運算子 ptr2 = &Num2; // 將該物體的家給霸佔了 ptr3 = &ch;
cout << ptr1 << endl; cout << ptr2 << endl; cout << ptr3 << endl; // 僅能用printf做顯示
// 顯示地址 printf("ptr1 = %x, ptr2 = %x, ptr3 = %x\n",ptr1,ptr2,ptr3); // '*' 取值的運算子, 顯示家裡的東西 printf("ptr1 = %d, ptr2 = %.2f, ptr3 = %c\n",*ptr1,*ptr2,*ptr3); // 改變指標內的東西, 改變家裡的東西
ptr1 = &Num5 ;
*ptr1 = 123; *ptr2 = 31.4f; *ptr3 = 'Z'; printf("ptr1 = %d, ptr2 = %.2f, ptr3 = %c\n",*ptr1,*ptr2,*ptr3); // 查看原本三個物體, 家裡的東西 printf("Num1 = %d,Num2 = %.2f, ch = %c\n",Num1,Num2,ch);
//修改參照變數內的東西 (因為是共用地址,所以這個地址的另一個人, 要去查看時也被改變)
ref1 = 456; ref2 = 94.81f; ref3 = 'Q';
// 查看原本三個物體 (查看原本目標家裡的東西)
printf("Num1 = %d,Num2 = %.2f, ch = %c\n",Num1,Num2,ch);
printf("Num5 = %d\n",Num5);
原本先宣告三種不同型態的變數}
再宣告三種不同型態的指標
- 先取原先三個的位址, 透過printf %x 把它們列印出來
- 透過取值運算子, 將指標內的東西 printf 出來
- 賦予值給 星號指標 *ptr 改變它內在的東西, printf 出來
- 查看原本三個物體, 家裡的東西
相關知識:
- 宣告: Type * pointer(指標名稱)
- 取址運算子:& + 變數
- 取值運算子:* + 指標
沒有留言:
張貼留言