2015年6月24日 星期三

[C筆記] typedef struct 觀念 用法

前言:變數不會只侷限在簡單的整數或者字串,撰寫時可以用struct 來做出你想要的類別,C中的類別與其他語言有些不同,struct中不能寫方法只能宣告物件內容。


code: sample


#include <stdio.h>
#include <stdlib.h>
typedef struct
{
        const char *descrption;
        float value;
        } swag;
typedef struct
{
        swag *swag ;
        const char *sequence;
        }combin;
typedef struct
{
        combin numbers;
        const char *make;
        }safe;
void method (safe *safe_pointer)
{
   
      printf("%0.2f\n",safe_pointer->numbers.swag->value);
     }
   
void method2 (safe safe_pointer)
{    
      safe_pointer.numbers.swag->value =safe_pointer.numbers.swag->value +1;
      printf("%0.2f\n",safe_pointer.numbers.swag->value);
     }

int main(int argc, char *argv[])
{
  swag gold ={"gold",10.0};
  combin numbers ={&gold,"1234"};
  safe s ={numbers,"5678"};
  method2(s);
  method(&s);
  return 0;
}

輸出結果:
11.00
11.00
補充說明

 method2(s);

編譯器複製了一份一樣架構的資料丟進這個方法裡做一個safe_pointer.numbers.swag->value=safe_pointer.numbers.swag->value+1的運算,在這個方法裡struct做任何的修改都只式改複製版本的值,但是為什麼最後結果會讓 method(&s);輸出也變11呢??

原因是因為雖然是複製版本,但是複製版本的swag欄位為一個指標,他與非複製版本同時指向參數真正儲存記憶體的位置。

 method(&s);

編譯器將s在記憶體中的位置資料丟進這個方法裡,在這個方法裡改任何struct中的變數,就是真實在改main中s的資料,

沒有留言:

張貼留言