C语言基础知识
字节(byte)和bit的区别
bit:比特是表示信息的最小单位,是二进制数的一位包含的信息或2个选项中特别指定1个的需要信息量。只有2种状态即0和1。
byte:计量存储容量的一种计量单位,通常情况下一字节等于8 bit
常用数据类型所占bit数
类型 | bit数 |
---|---|
int | 32 |
short | 16 |
long | 32 |
char | 8 |
枚举
枚举类型是一种基本数据类型,不是一种构造类型,因为它无法再分解成为任何基本类型
指针
C语言中指针常量只有一个NULL
字符串常量
字符串常量在内存中存储的时候系统会自动加字符串的末尾加一个"\0"作为字符串结束标志。因此在计算长度为n个字符的字符串常量的时候,在内存中实际占有n+1个字节的存储空间。
typedef关键字
typedef是为一种数据类型定义一个新的名字,例如:typedef unsigned long uint32,这样就把uint32声明为unsigned long类型了,在使用中就等同于使用unsigned long
常量const关键字
const int *a:const用来修饰指针a所指向的对象,也就是说我们无法通过指针a来修改其指向的对象。但是指针a本身的值是可以改变的,即可以指向其他对象。
int * const a:const修饰的是指针a,因此指针本身的的值是不可改变的,无法指向其他的对象,但是其指向的对象的值是可以改变的
int const *a:与const int *a意义相同
预定义符号
_ FILE _ :正在预编译的文件名
_ LINE _ :文件当前行的行号
_ FUNCTION _ :当前所在的函数名
_ DATA _ :预编译文件的日期
_ TIME _ :预编译文件的时间
_ STDC _ :如果编译器遵循ANSI C,则为1
条件编译
#ifdef XXX
#endif
#ifndef XXX
#endif
#if defined (XXX) || defined (YYYY)
#endif
#if defined (XXX) || !defined (YYYY)
#endif
#if (defined(VEGETA) || defined(_ VEGETA _)) && defined(EGIS)
数据对齐
如果一个变量的内存地址正好是它长度的整数倍,就被称作自然对齐。例如一个32位(4个字节)类型的数据,如果在内存中的地址刚好可以被4整除(最低2位是0),那么它就是自然对齐的。
字节序
大端模式:高地址中存放数据的低字节,低地址中存放数据的高字节
小端模式:低地址中存放数据的低字节,高地址中存放数据的高字节
可以通过如下代码来验证大小端:
typedef unsigned char byte;
tyepdef unsigned int word;
word val32 = 0x87654321;
byte val8 = *((byte *)&val32);
因为0x87是高字节,0x21是低字节,val8取得是高地址中的数据,所以如果val8=0x21则是大端模式,如果val8=0x87则是小端模式
移位运算
移位(<< / >>):左移(<<)n位相当于将原数乘以2n,而右移(>>)则相当于将原数除以2n
三目运算符
a > b ? a : b;
a>b为真,结果为a,否则为b