2019年3月6日 星期三

C 變數、指標變數、參照變數的範例

/* Notice: 
  * 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);
    }
原本先宣告三種不同型態的變數
再宣告三種不同型態的指標

  1. 先取原先三個的位址, 透過printf %x 把它們列印出來
  2. 透過取值運算子, 將指標內的東西 printf 出來
  3. 賦予值給 星號指標 *ptr 改變它內在的東西, printf 出來
  4. 查看原本三個物體, 家裡的東西
顯示結果如圖:



相關知識:

  • 宣告: Type * pointer(指標名稱)
  • 取址運算子:& + 變數
  • 取值運算子:* + 指標



沒有留言:

張貼留言

Android Studio IDE 錯誤

 :app:compile xxxxx JavaWithJavac FAILED An exception has occurred in the compiler (1.8.0_312). Please file a bug against the Java compiler ...