C语言变量与语句详解
1. 变量初始化与存储类型
1.1 自动变量初始化
自动变量的初始化需要更多开销,因为在程序链接时无法确定存储变量的位置。函数中的局部变量每次被调用时可能会占用不同的位置。因此,自动变量没有默认初始化,显式初始化是通过在块的开头插入一个不可见的赋值语句来完成的。
这种技术有四个后果:
1. 自动变量的初始化并不比赋值语句更高效。除了声明为 const 的变量外,在变量声明中初始化或使用赋值语句只是风格问题。
2. 隐式赋值语句会导致自动变量每次进入声明它们的函数(或块)时都会被重新初始化。这与静态变量不同,静态变量在程序开始执行之前只初始化一次。
3. 由于初始化是在运行时执行的,因此可以使用任何表达式作为初始化器。例如:
int func( int a )
{
int b = a + 3;
}
- 除非显式初始化,否则自动变量在创建时将包含垃圾值。
1.2 静态关键字的不同含义
静态关键字在不同上下文中有不同的含义,这常常会让初学者感到困惑。
当用于函数定义或块外的变量声明时, static 关键字将链接从外部变为内部,但存储类和作用域不受影响。以这种方式声明的函数和变量只能从声明它们的源文件中访问。
当用于块内的变量声明时, static 关键字将存储类从自动变为静态,链接和作用域不受
C语言变量与语句详细解析
超级会员免费看
订阅专栏 解锁全文
1343

被折叠的 条评论
为什么被折叠?



