前言:變數不會只侷限在簡單的整數或者字串,撰寫時可以用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欄位為一個指標,他與非複製版本同時指向參數真正儲存記憶體的位置。
沒有留言:
張貼留言