欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言中的变量

程序员文章站 2022-07-07 23:18:50
...

一.普通局部变量:局部变量无论是否静态均不允许同名,否则会出现error;当局部变量与全局变量同名时,依据就近原则进行判断。局部变量同名是指在复合语句的嵌套中,内层复合语句变量与外层复合语句变量同名,这样是允许的。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(int argc, char *argv[])
{
	int a = 0;
	static int a = 0;//error

	printf("%d\n", a);

	system("pause");
	return 0;
}

C语言中的变量

二.普通全局变量:全局变量无论是否静态都不允许同名,否则编译器会给出error。同名情况同上。但是需要注意的是,普通全局变量与外部声明的普通全局变量重名时,vs会报错,gcc会给出警告。

fun.c:
int a = 0;

test.c:
extern a;
int a = 20;

C语言中的变量

C语言中的变量

三.静态局部变量:只会定义一次,以后的定义,将自动忽略。要注意理解,静态变量所说的重定义是指在函数的多次调用中,而不是在一个函数体中定义多次。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
	static int a = 0;
	a++;
	static int a = 0;//error

	printf("%d\n", a);

	system("pause");
	return 0;
}

四.静态全局变量:静态全局变量只在当前源文件有效。当外部extern声明的外部全局变量与静态全局变量在同一源文件时,不会出现任何问题,程序能够正常运行。

  定义 作用范围 生命周期 内存区域 不初始化时变量的值
普通局部变量 {}内部 复合语句中离它最近的{}内 离他最近的大括号之间 栈区 内容随机
普通全局变量 函数外部 当前源文件和其他extern修饰的源文件 整个进程 堆区 0
静态局部变量 {}内部static修饰 离它最近的{}内 整个进程 堆区 0
静态全局变量 函数外部static修饰 当前源文件有效,不能被外部文件使用。 整个进程 堆区 0