1、常量
类型 | 符号表示 | 举例 |
整型常量 | 1234 | |
长整型常量 | l L | 123456789L |
无符号常量 | u U | 1234u |
双精度常量 | 123.4,1e-2 | |
单精度常量 | f F | 123.4f |
常量表达式 | 3+6 | |
字符常量 | 'x' #define宏定义 | |
字符串常量 | "hello world" | |
枚举常量 | enum{YES,NO}; |
转义字符常量
\n,\t,等
2、C变量及函数存储类型
(1)变量及函数声明格式
- 变量的声明格式
存储类型 类型修饰符 数据类型 变量名
说明:
存储类型:auto,extern,register,static;指明变量的存储位置
类型修饰符:long,short,signed,unsigned
数据类型:int,char,double,float,自定义类型struct,union
- 函数的声明格式
存储类型 返回数据类型 函数名(参数列表)
说明:
存储类型:指明函数的作用域 extern,static
(2)各种不同的存储类型
类型 | 作用域 | 生存域 | 存储位置 |
auto变量 | 一对{ }内 | 当前函数 | 栈 |
extern函数 | 整个程序 | 整个程序运行期 | 代码段 |
extern变量 | 整个程序 | 整个程序运行期 | 初始化在data段,未初始化在BSS段 |
static函数 | 当前文件 | 整个程序运行期 | 代码段 |
static全局变量 | 当前文件 | 整个程序运行期 | 初始化在data段,未初始化在BSS段 |
static局部变量 | 一对{ }内 | 整个程序运行期 | 初始化在data段,未初始化在BSS段 |
register变量 | 一对{ }内 | 当前函数 | CPU寄存器中 |
常量 | 当前文件 | 整个程序运行期 | data段 |
3、栈与堆
栈:存放函数调用时需记录的上下文信息,连续的存储单元,由操作系统管理,向低地址增长
堆:存放动态数据,非连续存储单元(链表结构),由程序员管理,向高地址增长
4、举例
- /*通过下面简单的代码来查看C程序执行时的内存分配情况*/
- #include <stdio.h>
- #include <stdlib.h>
- int a = 0;//data区
- char* p0;//bss区
- int main(void)
- {
- int b;//栈
- char s[] = "abc";//s-栈,abc\0-data
- char *p1,*p2;//p1,p2-栈
- char *p3 = "123456";//p3-栈,123456\0-data
- static int c = 0;//c-data
- p1 = (char*)malloc(10);//10byte-堆
- p2 = (char*)malloc(20);//20byte-堆
- free(p1);
- free(p2);
- p1 = NULL;
- p2 = NULL;
- return 0;
- }