/****************typedef与const****************************************/
typedef int *PINT; const PINT p2; 相当于是int *const p2;
typedef int *PINT; PINT const p2; 相当于是int *const p2;
以上都是指针本身是常量
const int *p;这种效果,只能typedef const int *CPINT; CPINT p1;
指针变量时常量
/***************C语言结构体对齐*****************************************/
①配合硬件,硬件本身有物理限制,对齐访问可提高效率
char 类型的结构体元素,在32位操作系统中会以4字节创建,因32位CPU操作是以32位进行操作,如果以char进行操作,下个元素的字节会被分开在两个单位的32位中,不便于操作。
例:4字节对齐时,每个元素为4的整数倍
②其他原因,例:cache的缓存特性
③对齐访问,提高访问效率,不对齐访问,提高内存空间利用
对齐指令:#pragma pack() #pragma pack(n) (n=1/2/4/8)
#pragma
用来指挥编译器,设置编译器的对齐方式
编译器的默认对齐方式是4,n值为修改为对应的对应方式
使用方法
#prgama pack(n)开头 这里n设为1,就以1字节对齐(即取消对齐了)
#pragma pack()结尾
定义一个区间,这个区间内以n字节对齐
注意事项
#prgma pack的方式在很多C环境下都是支持的,但gcc也可以不过不建议使用
gcc推荐对齐指令__attribute__((packed)) __attribute__((aligned(n)))
__attribute__((packed))
作用
取消对齐访问
使用方法
直接放在要进行内存对齐的类型定义的后面
作用范围
只作用加的这个类型
__attribute__((aligned(n)))
作用
让整个结构体变量整体进行n字节对齐
(注意是结构体变量整体n字节对齐,而不是结构体内各元素也要n字节对齐)
使用方法
直接放在要进行内存对齐的类型定义的后面
作用范围
只作用加的这个类型
使用方法例程
struct mystruct21{
char a;
int b;
short c;
} __attribute__((packed));
/************************C语言中数字后面加字母********************************/
U表示该常数用无符号整型方式存储,相当于unsigned int
L表示该常数用长整型方式存储,相当于long
F表示该常数用浮点方式存储,相当于float
/************************C语言函数不声明也能使用********************************/
C和C++是强类型语言
变量类型均应在代码执行前确定
函数声明方面C和C++则不同
C++语言中,在被调用之前未声明或定义是不允许
C语言中,函数调用前未声明是允许的
这一特性
优点
灵活、省事
缺点
程序可读性差
易出错
注意
函数应先声明再调用,是一种纠错机制
不声明,则没有用到这种纠错机制,虽然编译、连接通过,程序也能运行,但很可能结果不正确
一个好的程序员,应该养成严谨、规范的编程习惯,编译程序时应打开显示所有警告选项“-Wall”,并且对编译器提出的所有警告都要给予处理,仅以编译、连接通过为目标,这可能会有潜在的危害
/****************************************************************************************/