簡體   English   中英

在 C 函數中訪問全局結構

[英]Accessing global structs in C functions

我的理解是 C 函數只能使用變量的副本,除非通過地址傳遞。 但是,以下似乎工作正常,我對為什么感到困惑。 我正在訪問 function 中的全局結構,它似乎更改了全局值,即使我沒有傳遞地址。

Global struct:
cal{
int a;
int b;
}cal;

Function:
AlterCalAandCalB()
{
cal.a = 1;
cal.b = 2;
}

這似乎不僅改變了 function 內部的全局變量。

我重寫了代碼,性能是一樣的:

AlterCalAandCalB(struct cal *ptrCal)
{
ptrCal->a = 1;
ptrCal->b = 2;
}

我有興趣學習最佳實踐,而不僅僅是有效的方法。 我意識到不推薦使用全局變量,但在這種特殊情況下它對我有用。 但我想學習指針的最佳實踐。

我的理解是 C 函數只能使用變量的副本,除非通過地址傳遞。

這有點混亂。 C 函數按值接收其 arguments - 粗略地說,它們接收副本,包括參數是否為 object 或 function 的地址。這是關於參數傳遞,而不是關於 function 主體中語句的行為。

每個可執行語句都在 function 主體中。 如果函數不能共享對它們的訪問,那么“全局”變量就沒有意義了。

我有興趣學習最佳實踐,而不僅僅是有效的方法。

最佳實踐見仁見智,因此這里不在討論范圍內。 但請注意,如果您要將 object 的地址傳遞給您想要訪問它的所有函數(我想不包括main() ),那么首先在文件 scope 中聲明 object 是沒有意義的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM