Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的静态变量_C_Variables - Fatal编程技术网

c语言中的静态变量

c语言中的静态变量,c,variables,C,Variables,在文件中声明的静态变量不能从文件外部访问。 但是,如果我们在文件和全局指针中声明一个静态变量,然后将静态变量的地址分配给指针,然后将指针外部化,则可以访问它 静态变量不能直接访问,但可以使用全局指针间接访问,然后进行外部化,这样说对吗?如果有指向进程的指针,进程中的任何内容都可以访问,禁止特定于体系结构的限制访问的机制。冗余地说变量可以通过指针访问是多余的。说静态变量“不能从外部访问”是不正确的。声明为static和外部访问的可能性完全无关 当某个实体被声明为静态时,这只意味着该实体将不会与其他

在文件中声明的静态变量不能从文件外部访问。 但是,如果我们在文件和全局指针中声明一个静态变量,然后将静态变量的地址分配给指针,然后将指针外部化,则可以访问它


静态变量不能直接访问,但可以使用全局指针间接访问,然后进行外部化,这样说对吗?

如果有指向进程的指针,进程中的任何内容都可以访问,禁止特定于体系结构的限制访问的机制。冗余地说变量可以通过指针访问是多余的。

说静态变量“不能从外部访问”是不正确的。声明为
static
和外部访问的可能性完全无关

当某个实体被声明为静态时,这只意味着该实体将不会与其他翻译单元中同名的其他实体相关联

例如,当您在不同的转换单元中声明两个
extern
变量名
a
时,这些变量实际上是相同的单个变量。当您在不同的转换单元中声明两个名为
a
静态
变量时,这些变量是两个不同的自变量。这就是C语言中的
static
所做的。除此之外没有其他功能


从更日常的角度来说,不可能从外部链接到静态变量,也就是说,不可能要求链接器允许我们从外部按名称访问静态变量。但是,如果您设法以某种方式获得了该指针,则始终可以通过其他方式访问该变量,如通过指针。

无法访问该变量,并且不会有名称与该变量名称冲突,也不会有人能够找到该变量的符号

当然,你可以通过指针访问它。进程的整个内存(堆栈+堆)都可以通过指针访问,这是无法防止的


使用静态变量不是防止从模块外部访问它的安全措施。

在“C”中的static关键字只是将变量的范围限制到特定的转换单元(即“C”文件)。换句话说,它限制了该变量的链接。除此之外,没有其他内容。在C中,所有变量都是静态的,全局变量和自动变量在其生命周期内可以通过指针访问。没有办法阻止这一点。

将静态和外部链接的变量名分别想象为“maddy's house”和“123 foo street”等地址。前者只对认识你的人有意义,而后者对其他人也有意义,因为有一个既定的惯例。但即使“麦迪之家”没有街道地址,它仍然有一个纬度和经度,你可以给那些想向它发射导弹的人<代码>:-)

问题应该在stackoverflow中,因为它是关于这个问题的编程+1。从未想过:)您甚至不需要一个
extern
指针来“访问”变量。指向变量的指针也可以从函数返回,也可以分配给指向指针的未引用指针。根据定义,全局指针在外部是可见的。除此之外。。。除了将变量初始化为0+1.nonetheless@SiegeX:具有静态存储持续时间的所有对象都初始化为0。但是为了具有静态存储持续时间,对象不必声明为静态。换句话说,0初始化与关键字
static
不直接相关。0初始化是特定存储持续时间的结果。问题(在我看来)其实是关于联系的。