c语言各个数据类型的长度及范围
char %c
bool stdbool.h true false //特殊类型,c语言没有布尔类型,c99之后也只是依靠stdbool 头文件模拟。
unsigned char 1 %hhu 0~255 //unsigned表示无符号数;
unsigned short 2 %hu 0~65535
unsigned int 4 %u 0~-65536*65536-1
unsigned long 4/8 %lu
unsigned long long 8 %llu 0~65536^4-1
signed char 1 %hhd -128~127 //signed表示有符号数,如果数据类型不加前缀默认是有符号数 signed short 2 %hd -32768~32767 signed int 4 %d -2147483648 ~ 2147483647 signed long 4/8 %ld signed long long 8 %lld float 4 %f double 8 %lf long double 12/16 %LF C语言32个关键字: 数据类型: 内建类型:void unsigned signed char short int long float double 自定义类型:struct union enum typedef 类型限定:auto const static volatile register extern 字节数计算:sizeof 流程控制: 分支:if else 开关:switch case break default 循环:for while do 跳转:goto continue return 其中特殊的有auto这个关键字在c++中表示自动类型,比如auto x;由编译器推断x的数据类型;而在c中早期用于定义临时变量(局部变量和块),C11标准中它可以用于定义自动推导类型的变量。; const 用于"保护"变量不被"显式"修改,提高程序的安全性,但也可以通过特殊方法修改const变量的值。(如果data内存中的变量被const修饰后就存储到了text段,就变成了真正的常量。) static 改变存储位置、延长生命周期、限制作用域。修饰函数、全局变量:限制函数和全局变量的作用域,只能在它所在的.c文件中使用,可以防止函数、全局变量的命名冲突。
c语言的几个数据储存位置
代码段text:存储二进制指令和一些常量数据,特点:该内存段是只读的,强行修改会发生段错误。 数据段data:初始化过的全局变量、静态变量。 静态数据段bss:未初始化过的全局变量静态变量,特点:程序运行前该段内存会被清理为零,所以全局变量、静态变量默认值为零。 堆heap:由程序员使用malloc系列函数,自己管理的一块内存,特点足够大。 栈stack:存储局部变量,由系统自动(分配、释放)管理,会随着函数的调用分配内存,函数执行结束释放内存,特点:安全、方便。 C语言中没有管理堆内存的语句,而是由标准库提供一套函数来管理堆内存。
#include <stdlib.h> #include <strings.h> void *malloc( size_t size ); void bzero(void *s, size_t n); void *memset(void *s, int c, size_t n);//几乎用不到下面这两个 void *calloc(size_t nmemb,size_t size);