全局和指针访问之间的差异

1po*_*o61 -1 c embedded pointers

想知道下面两位(标记为方法1和方法2)之间的差异是什么,与之相关的任何好处/风险,最后是有更好的方法.

 typedef struct
 {
   int iAnInteger;
 } s_Thing;

 s_Thing sMine;

 void SomeFunction(int myInt)
 {
    /* Method 1 */
    s_Thing *pMine = &sMine;

    pMine->iAnInteger = 0;

    /* Method 2 */
    sMine.iAnInteger = 0;
 }
Run Code Online (Sandbox Code Playgroud)

如上所述,有哪些优点/缺点,最佳做法?

谢谢!

Bat*_*eba 5

方法3:

void SomeFunction(int myInt, s_Thing* pWho)
{
    pWho->iAnInteger = 0;
}
Run Code Online (Sandbox Code Playgroud)

甚至更好,因为如果你对如何s_Thing创建实例进行更改,它将更易于维护.

您的其他两种方法都存在本地化问题:尝试限制修改全局范围内的数据的函数数量.