社区
C语言
帖子详情
作为全局变量,static int a和int a是一样的吗?????
CCjiajia101
2004-12-11 04:35:41
虽然第一个是静态,但作为全局变量是一样的吗?在不同地方可有不同的作用?在非主函数的体内定义不讨论
...全文
2316
21
打赏
收藏
作为全局变量,static int a和int a是一样的吗?????
虽然第一个是静态,但作为全局变量是一样的吗?在不同地方可有不同的作用?在非主函数的体内定义不讨论
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Sanco
2004-12-14
打赏
举报
回复
静态存储区 和 全局数据区 是一个数据区吧。
只是分为初始化的 和未初始化的。
lovessm
2004-12-13
打赏
举报
回复
给个测试程序:
/* test1.h */
#ifndef __TEST1_H__
#define __TEST1_H__
int a; /* 临时定义,并未真正分配空间 */
void test1();
#endif
/* test1.c */
#include "test1.h"
void test1()
{
printf("a in test1.c: %d\n",a);
}
/* test2.h */
#ifndef __TEST2_H__
#define __TEST2_H__
int a; /* 临时定义 */
void test2();
#endif
/* test2.c */
#include "test2.h"
void test2()
{
printf("a in test2.c: %d\n",a);
}
/* main.c */
#include "test1.h"
#include "test2.h"
int a=1; /* 真正定义,分配了真正的存储空间,并进行了初始化 */
int main()
{
test1();
test2();
return 0;
}
/* 运行结果 */
a in test1.c: 1
a in test2.c: 1
/* 补充要说的 */
如果到最后还是没发现变量的真正定义,那么就会选择“最后”一个作为真正定义。
lovessm
2004-12-13
打赏
举报
回复
你给每个加上static,限制变量的可视区为本文件域!
Popo_CN(Popo_CN) 说的有问题,你的程序就算不加static编译也是通过的,原因再于一个“临时定义”的概念,即多个变量声明,如果都不赋初值,那么这些只能算是临时的定义,因此不管你临时定义多少次,都是不会冲突的。
daikaiming
2004-12-12
打赏
举报
回复
同意上面的意见!!!
yangfasheng
2004-12-12
打赏
举报
回复
Microsnow(冰火) ( ) 信誉:100
=======================
说得不错!
Popo_CN
2004-12-12
打赏
举报
回复
Static 为文件级
test1.c
int a;
void test1(){
printf("%d\n",a);
}
test2.c
int a;
void test2(){
printf("%d\n",a);
}
maintest.c
#include "test1.h"
#include "test2.h"
int main(){
;
}
编译时候会报错。加上static 问题解决
peng22277
2004-12-12
打赏
举报
回复
静态存储区vs全局数据区???
lovessm
2004-12-12
打赏
举报
回复
1、影响作用域
static int i; /* i只在本文件中可见,即你不能通过extern引用 */
int i; /* i可在别的文件中通过extern引用 */
2、影响存储的区域
static int i; /* 编译器在编译时,会将其存储在静态存储区 /
int i; /* 会存储在全局数据区 */
但是,二者在编译时,如果不明写初始化,编译器会自动把二者初始化为0,这点二者相同。
bingbing1981
2004-12-12
打赏
举报
回复
不一样
时间同
空间不同
sharkhuang
2004-12-12
打赏
举报
回复
不一样的!static还有限制变量的作用范围。所以你能看到很多这样的定义
#define LOCAL static
fanlord
2004-12-11
打赏
举报
回复
static用在函数内,可使静态变量局部化。
anncanm
2004-12-11
打赏
举报
回复
static int a 如果在非主函数中,生存周期是整个程序吧!在一次调用的时候它的值还是存在!
在外部static int a ;和int a ; 是一样的,全局变量默认为static 的,好象是这样,我这么理解的!
flyingsnow1999
2004-12-11
打赏
举报
回复
同意楼上
greenteanet
2004-12-11
打赏
举报
回复
引用:
static int a只被本文件可见,外部文件不可见;而int a如果在外部文件作以下声明: extern int a,那么它在声明的文件里也是可见的.
wen167
2004-12-11
打赏
举报
回复
如果缺省的全局变量,系统会认为是extern int a,?此为愚弟意见
idler
2004-12-11
打赏
举报
回复
ah,冰火兄正解,C语言好基础
wen167
2004-12-11
打赏
举报
回复
同意冰火老兄
melonliu
2004-12-11
打赏
举报
回复
冰火正确!影响作用域
Joe
2004-12-11
打赏
举报
回复
static int a只被本文件可见,外部文件不可见;而int a如果在外部文件作以下声明: extern int a,那么它在声明的文件里也是可见的.
「已注销」
2004-12-11
打赏
举报
回复
个人认为是一样的,生存期一样。
加载更多回复(1)
c语言中,
static
局部变量和
static
全局变量
static
全局变量
和
static
局部变量的存储区域和作用域
static
int
与
int
的区别
转自:微点阅读https://www.weidianyuedu.com 在网上找了很多相关资料,但是因为不是计算机专业的,对“类”的概念不是很清楚。所以和我概念一样模糊的少年们,不妨看一下下面几段代码,看了就能理解
static
int
和
int
的区别: code 1: #include
int
a=0;//这里
int
在函数外,为
全局变量
int
add(){ pr
int
f("%d",a++); return 0;}
int
main(){ for(
int
i=0;i#include s...
static
全局变量
和 非
static
全局变量
的区别
全局变量
(外部变量)的说明之前再冠以
static
就构成了静态的
全局变量
。
全局变量
本身就是静态存储方式,静态
全局变量
当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态
全局变量
的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的
全局变量
在各个源文件中都是有效的。而静态
全局变量
则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静
C++
static
关键字 总结/
static
全局变量
和
全局变量
的区别
首先了解一下内存的分布图: 代码区 全局数据区 堆区 栈区 代码区:存储代码 全局数据区:
static
数据,
全局变量
, const常量 堆区:由程序员自己new出来的动态数据, 需要手动释放。若忘记释放,会造成内存泄漏,则程序结束时会由操作系统回收。 栈区:函数内部变量,由IDE自动分配,结束时自动释放。 后续可以再仔细研究一下堆区和栈区的区别,这里先不讨论。 首先总结
static
全局变量
...
static
作用(修饰函数、局部变量、
全局变量
)
C语言:
static
作用(修饰函数、局部变量、
全局变量
) 一、
static
全局变量
与普通的
全局变量
有什么区别 ?
全局变量
(外部变量)的说明之前再冠以
static
就构成了静态的
全局变量
。
全局变量
本身就是静态存储方式, 静态
全局变量
当然也是静态存储方式。 这两者在存储方式上并无不同。 这两者的区别在于非静态
全局变量
的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变...
C语言
69,390
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章