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

本文介绍了C语言中变量的不同存储类型,包括自动变量、静态变量及寄存器变量,并探讨了不同存储类型的变量如何进行初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容来源: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的变量除外);②这条隐式的赋值语句在代码块每次使用时都会执行一次;③优点:可以用任何表达式为自动变量赋值;④不显式初始化得到的是废值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值