将静态变量传递到函数

将静态变量传递到函数

问题描述:

我有一个ptr变量在函数中更新。我想将这个变量传递给function2,这是在另一个.c文件中。 将静态变量传递给不在同一个.c文件中的函数是合法的吗?如果没有static关键字,只保留全局ptr会更安全吗?将静态变量传递到函数

static Event * ptr = NULL; 

void function(Event * newPtr) 
{ 

    ptr = newPtr; 
    function2(ptr); 
} 

//in separate c file 
void function2(Event * pointer) 
{ 
    pointer->event = 2; 
} 
+2

是的,这是合法的。不管它是否“正确”取决于该功能对数据的作用。 – StoryTeller

+1

当你在一个函数调用中使用一个变量时,你并不真正传递这个变量本身,它只是* value *。或者说,它的价值*拷贝*。 –

+0

为什么'function2(ptr)'而不是'function2(newPtr)'直接? –

静态变量

static Event * ptr = NULL; 

不能从其他来源的文件中看到,但如果你把它作为一个参数,它只是复制在堆栈上同其他指针,这样你就可以这样做的。

但我会通过它作为const指针和明确文件说它是static变量为他人。

void function2(Event * const pointer) 
{ 
    pointer->event = 2; 
} 
+1

为什么'const'和explicity会记录它?这没有理由。 – tilz0R

static符仅限制变量(internal linkage)的范围。 但是,当您通过ptr时,将使用ptr中包含的地址,这是完全合法的(编译时没有问题,因为您没有使用变量ptr,您正在使用其中包含的值)。

但是在做这件事之前请三思,因为如果其他人查看您的代码时您声明为static,则会给人一种印象,即该变量仅在此文件中使用。如果function2中的代码对传入的指针做了任何操作(假设您已将内存动态分配给指针,并且它在function2中释放,并且您试图在您声明ptr的文件中删除/访问)。

如果你照顾function2即将与指针做什么,那么它完全安全的做到这一点。但正如我上面提到的,这样做不是一个好习惯。

你可以随心所欲地做任何事情。静态意味着全局存储& &本地文件符号 l可见性。但变量可以随意使用