C语言变量声明类型与存储区域探究
来源:互联网 发布:浙江工业大学网络 编辑:程序博客网 时间:2024/05/22 15:17
静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间
一个由C/C++编译的程序占用的内存分为以下几个部分
栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
全局区(静态区)(static)全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放 。
文字常量区常量字符串就是放在这里的。 程序结束后由系统释放
程序代码区—存放函数体的二进制代码。
For循环中其实不管是i++或++i都是在for循环体全部执行完毕后才执行,
如:for(int i = 0;i < 10; i++){
printf(“%d\n”,i);
}
等同于for(int i = 0;i < 10; ){
printf(“%d\n”,i);
i++;
}
而for(int i = 0;i < 10; ++i){
printf(“%d\n”,i);
}
同样和for(int i = 0;i < 10; ){
printf(“%d\n”,i);
++i;
}是一个意思
i++ :先在i所在的表达式中使用i的当前值,后让i加1
++i :让i先加1,然后在i所在的表达式中使用i的新值
i++由于是在使用当前值之后再+1,所以会需要一个临时变量来转储,而++则直接+1,不存在这样的问题。
在没有编译器优化的情况下,++i更好。优化过后两者都一样
- C语言变量声明类型与存储区域探究
- C语言变量存储类型
- C语言--变量存储类型
- C语言变量存储类型
- C语言中变量的作用域与存储类型
- C语言中变量的存储类型与初始化
- 浅谈c语言的变量与函数存储类型
- 条件编译、Unix中C函数声明、变量存储类型、程序与进程
- c语言变量声明与定义_extern
- c语言变量的存储类型
- C语言各种类型变量存储方式
- C语言变量类型和存储分配
- C语言中的变量的存储类型
- 【精】C语言之变量存储类型
- C语言中变量的存储类型
- C语言的变量存储类型
- c语言之变量存储类型
- C语言中变量的存储类型
- 数据挖掘(下)
- [每日问答]特征选择和数据降维的区别?
- 后台统计初学篇
- Standing on shoulders of ture Giant
- Chrome浏览器越狱 XX-net设置
- C语言变量声明类型与存储区域探究
- 关于Java的Boolean.getBoolean方法
- C# 枚举集合
- TensorFlow的简单认识
- IIC协议的那些事儿
- 多种单链表反转面试题总结
- 文件列表
- 损失函数介绍
- [设计模式]组合模式(Composite) treenode