C语言的变量
来源:互联网 发布:centos 7.2 minimal 编辑:程序博客网 时间:2024/05/21 16:58
一个变量的三大特点
1、变量的数据类型:整型等2、变量的作用域:局部变量和全局变量
3、数量的存储类型:register、static、auto
变量的储存和调用:
当一个可执行文件被执行(./a.out),即创建一个进程。此时,系统会为进程分配活动空间,此空间一般为虚拟空间,一般为4GB。操作系统不会通过完整映射将虚拟内存映射到物理聂村上上(那样做也不够),而是调用MMU这个软件,通过写时复制的功能将需要处理的文件映射到内存上。
写实复制:比如说有2MB的数据需要处理(一共1GB的数据),那此时就将2MB的数据搬到物理内存中进行处理
写实复制:比如说有2MB的数据需要处理(一共1GB的数据),那此时就将2MB的数据搬到物理内存中进行处理
进程空间分布图
栈空间(由系统管理):局部变量、函数形参、自动变量(auto)
堆空间:malloc、ralloc、caollc等函数
全局数据区(分三块):
1、bss段:未初始化的全局变量
2、or段(only read):系统常量(不可修改)
3、静态数据储存区:由static修饰的变量
例子:
char *ptr()
{
char ptr[] = "hello world";
return ptr;
}
int main()
{
int *ptr = ptr();
printf("%s\n",ptr);
}
结果是不可被打印出的,因为ptr被分配在栈空间,在调用时已经被释放掉了,将第三行修改为:static char ptr[] = "hello world";即可,将ptr分配至堆空间
如果将数组修改为指针变量,就不会报错,因为此时的hello world为全局变量,不会释放
全局变量的局部变量区别:
1、未初始化的全局变量储存在全局数据区的bss 段,而局部变量分配在栈空间
2、未初始化的全局变量的默认值为0,未初始化的全局变量的值不确定
3、全局变量的作用域的整个程序,而局部变量的作用域为整个函数
例子:
int main()
{
cahr *ptr = "hello world";
*ptr = "L";
printf("%s\n",ptr);
}
会报错,因为ptr数值在全局数据区的or段,不可 修改其值
堆空间:malloc、ralloc、caollc等函数
全局数据区(分三块):
1、bss段:未初始化的全局变量
2、or段(only read):系统常量(不可修改)
3、静态数据储存区:由static修饰的变量
例子:
char *ptr()
{
char ptr[] = "hello world";
return ptr;
}
int main()
{
int *ptr = ptr();
printf("%s\n",ptr);
}
结果是不可被打印出的,因为ptr被分配在栈空间,在调用时已经被释放掉了,将第三行修改为:static char ptr[] = "hello world";即可,将ptr分配至堆空间
如果将数组修改为指针变量,就不会报错,因为此时的hello world为全局变量,不会释放
全局变量的局部变量区别:
1、未初始化的全局变量储存在全局数据区的bss 段,而局部变量分配在栈空间
2、未初始化的全局变量的默认值为0,未初始化的全局变量的值不确定
3、全局变量的作用域的整个程序,而局部变量的作用域为整个函数
例子:
int main()
{
cahr *ptr = "hello world";
*ptr = "L";
printf("%s\n",ptr);
}
会报错,因为ptr数值在全局数据区的or段,不可 修改其值
函数的声明和定义:
1、声明不分配空间,定义分配空间2、声明可多次,定义只有一次
0 0
- c语言的变量
- C语言的变量
- C语言的变量
- C语言的静态变量
- C语言变量的初始化
- c语言变量的属性
- C语言的外部变量
- C语言变量的属性
- C语言的外部变量
- C语言:变量的数据类型
- C语言 变量的声明
- C语言变量的初始化
- C语言--变量的存储
- C语言变量的使用
- C语言-变量的类型
- 不一样的C语言-变量
- C语言的变量-1
- C语言的变量-2
- Composer安装文档
- iOS7到iOS8 一个通用的横竖屏幕切换总结
- Java注解
- php 打包下载zlib函数
- quotes_historical_yahoo
- C语言的变量
- 点积与叉乘的运算与物理意义
- centos6.5分区与文件系统
- 理解Windows内核模式与用户模式
- oracle sqlplus 方向键不能用
- sql server和mysql常用字段类型对比
- java.lang.NoClassDefFoundError: org/activiti/validation/ProcessValidator
- tsung测试openfire
- php调用mysql存储过程的详解