C語言結構體作為形參
今天碰到一個問題,程式需要修改結構體內成員的值
程式碼如下:
typedef struct
{
int n;
}St;
void a(St L);
int main()
{
St L;
L.n=0;
printf("%d\n",L.n);
a(L);
printf("%d",L.n);
getchar();
return 0;
}
void a(St L)
{
L.n=1;
}
程式宣告一個結構體變數,並在函式中修改成員的值,但並沒有生效,兩次輸出都為零。
問題應該出在函式的值傳遞與地址傳遞上,修改後如下:
typedef struct
{
int n;
}St;
void a(St *L);
int main()
{
St L;
L.n=0;
printf("%d\n",L.n);
a(&L);
printf("%d",L.n);
getchar();
return 0;
}
void a(St *L)
{
(*L).n=1;
}
將函式形參和實參修改為按地址傳遞的方式就可以了
還有個小問題
(*L).n=1;
修改後的函式a內賦值必須加括號,點號的優先順序比乘號高,不加括號就會發生錯誤的賦值
*L.n=1;
意思是將L.n這個地址的值修改為1,但此處L.n並不是地址,傳入的形參L本就是一個結構體的地址,地址.n就更無從說起了。
(*L).n=1;
加括號後就變成了取L這個地址的值,也就是結構體,將其成員n的值修改為1.
相關文章
- C語言 形參和實參C語言
- C語言結構體專題C語言結構體
- C語言結構體大小分析C語言結構體
- C語言 將函式(有參、無參)作為引數傳遞C語言函式
- C語言-->(十四)結構體、巨集、編譯C語言結構體編譯
- C語言教程——03 C語言結構C語言
- C語言-選擇結構C語言
- Go 語言 結構體Go結構體
- C 語言結構體記憶體佈局問題結構體記憶體
- C語言結構體記憶體佈局問題C語言結構體記憶體
- C語言騷操作:結構體初始化方法C語言結構體
- “c語言+結構體+連結串列”實現名片系統C語言結構體
- C語言之結構體C語言結構體
- C語言學習筆記:結構體與指標C語言筆記結構體指標
- Go 語言 結構體連結串列Go結構體
- c語言作業C語言
- C語言中結構體感悟C語言結構體
- C++語法-結構體C++結構體
- go語言學習-結構體Go結構體
- Go 語言 結構體和方法Go結構體
- 如何系統學習C 語言(中)之 結構體篇結構體
- C語言兩結構體之間的成員互換C語言結構體
- 資料結構 順序棧(c語言)資料結構C語言
- 資料結構雜湊表(c語言)資料結構C語言
- C語言作業2C語言
- C語言作業1。C語言
- c++形參實參C++
- c語言圖書館管理系統----學會使用結構體C語言結構體
- c語言基礎筆記DAY7_結構體共用體列舉C語言筆記結構體
- 資料結構C語言|佇列相關資料結構C語言佇列
- C語言開發windows程式主要程式結構C語言Windows
- C語言 第八章 結構體與共用體 重點 典型題C語言結構體
- 實驗6 C語言結構體、列舉應用程式設計C語言結構體程式設計
- C語言實驗作業C語言
- 開源大語言模型作為 LangChain 智慧體模型LangChain智慧體
- C語言中結構體直接賦值?C語言結構體賦值
- C語言 共用體C語言
- 重學C語言_資料結構與基礎語法C語言資料結構