#include <stdio.h>
int n = 50;
int main()
{
int a = 10;
float b = 10;
char c = '10';
double d = 10;
printf("a=%d,b=%f;c=%c,d=%lf,n=%d", a, b, c, d, n);
return 0;
}
运行结果:a=10,b=10.000000;c=0,d=10.000000,n=50
上述程序中变量分为两大类:
1.int n = 50;被称为程序中的全局变量,因为它不在函数体内。
全局变量的特点是作用于整个程序。
2.函数体{ }之中的a b c d被称为局部变量,它们都是在函数main()中。
局部变量的特点是进函数体生成,出函数体销毁。
程序中的int float char double称为数据类型,是C语言中标识变量的指令,有了这些指令机器就知道该给这个变量分配几个字节,存在哪个区域。
一.C数据类型定义:用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
1.数据类型分类:
(1)基本数据类型(也叫做算术类型):int, char, float,double
(2)枚举类型:也是算术类型,用来定义离散整数值变量,用到关键词enum
(3)void类型
(4)派生类型:包括数组类型、指针类型、结构体类型
2.基本类型书写:
以0开头为8进制,如045,021.
以ob开头为2进制,如ob1101101
以0x开头为16进制,如0x21458adf
二.C语言经过编译后将内存分为以下几个区域:
(1)栈(stack)区:由编译器进行管理,自动分配和释放,存放函数调用过程中的各种参数、既不变量、返回值以及函数返回地址。操作方式类似数据结构中的栈。
(2)堆(heap)区:用于程序动态申请分配和释放空间。C语言中的malloc和free,C++中的new和delete均是在堆中进行的。正常情况下,若程序员没有释放空间,则程序结束时系统自动回收。
注意:此处堆并非数据结构中的堆。
(3)静态(全局)存储区:分为DATA段和BBS段。
DATA段(全局初始化区)存放初始化的全局变量和静态变量;
BBS段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。
其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在成句执行之前已为0.
(4)文字常量区:存放常量字符串。程序结束后由系统释放。
(5)程序代码区:存放程序的二进制代码。
(6)数据区:存放已初始化的全局变量、静态变量(全局和局部)、常量数据。
显然,C语言中的全局变量和局部变量在内存中是有区别的。C语言中的全局变量包括外部变量和静态变量,都是保存在全局存储区中,占有永久性的存储单元;局部变量,即自动变量,保存在栈中,只有在所在函数被调用时才由系统动态在栈中分配临时性单元。
总结来说,局部和外部变量放在静态区,局部变量放在栈区。
可执行文件加载进内存后形成的进程在内存中的结构: