c语言变量的存储类型,变量的初始化

内容来源:C和指针(第二版),人民邮电出版社。

我太懒了,直接剪贴了书上的内容,讲得比较详细。书上用的c语言的版本是ANSI 90,有点过时了。

总结起来就是:

一、存储类型

即指存储变量值的内存类型,有普通内存、运行时堆栈、硬件寄存器。

默认存储类型与变量声明位置有关:像全局变量这样代码块之外声明的变量存储在静态内存中,不在堆栈里,程序执行期间始终存在;代码块内声明的变量默认存储类型是自动的(automatic),称为自动(auto)变量,存储在堆栈中,执行到代码块时被创建,代码块执行完即被销毁。

注意!可以给自动变量加上关键字static,将它变为静态存储类型,它就会在程序运行期间一直存在,但是它的作用域是不变的,代码块外面还是不能用这个变量。

//自动变量转静态变量之后作用域不变,举个例子: 
#include<stdio.h>
int main() {
	int a=10;printf("%d\n",a); 
	{
		static int b=9;
		printf("%d\n",b); 
	} 
	//把下面这行注释掉,就可以正常输出10和9.
	//不注释就会报错:[Error] 'b' was not declared in this scope. 
	//printf("%d\n",b); 
	return 0;
}

还有register存储类型,内容自己看吧,主要注意不要给很多变量都添加register关键字的声明,自己乱用register可能程序性能不升反降。

二、初始化

静态变量不显式初始化,会被自动初始化为0。

自动变量不显式初始化,里面的将会是废值。

但是如果自动变量显式地初始化了,其效果就是在代码块的起始处插入一条隐式的赋值语句,其结果就是:①自动变量初始化了,和它在代码块里给他赋值效率上没什么区别(声明为const的变量除外);②这条隐式的赋值语句在代码块每次使用时都会执行一次;③优点:可以用任何表达式为自动变量赋值;④不显式初始化得到的是废值。




猜你喜欢

转载自blog.csdn.net/github_35736728/article/details/79472146