自定义类型
字节对齐
struct Test
{
int Num;
char *pcName;
short sData;
char ch;
}*p=(Test*)0x2000;
struct Test p2;
p2.Num=100;//初始化结构体的指针访问其成员可以使用---->,c++主函数中可以省去struct
int main()
{
printf("%d
",p+1); //2012
printf("%d
",(unsigned long)p+1);//2001
printf("%d
", (unsigned int*)p + 1);//2004
}
【1】typedef和#define的区别?
(1)用法不同:typedef是变量类型的别名,增强程序的可读性。宏是字符替换。
(2)执行时间不同:typedef是编译过程的一部分,有类型检查的功能,define在预编译部分,在编译之前,无类型检查;
(3)作用域不同:typedef有作用域限定,define不受作用域限定;
(4)对指针的操作不同:define定义是字符替换,typedef是类型,typedef结束要加分号;
【2】用代码检测当期系统的大端小端模式?
int a = 0x11223344;
char *p = (char*)&a;
if (*p == 0x44)
{
printf("小端");
}
【3】struct和class的区别?
struct默认为public,class默认为private
【4】struct和union的区别?
struct 每个成员都分配独立的内存空间,union共用一个内存空间,enum是变量的名称的集合
1、在没有显示说明的情况下,枚举常量(也就是花括号中的常量名)默认第一个枚举常量的值为0,往后每个枚举常量依次递增1
2、在部分显示说明的情况下,未指定的枚举名的值将依着之前最有一个指定值向后依次递增
3、一个整数不能直接赋值
给一个枚举变量,必须用该枚举变量所属的枚举类型进行类型强制转换后才能赋值
4、同一枚举类型中不同的枚举成员可以具有相同的值
5、同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的枚举成员(枚举常量)
【5】struct结构体的内存对齐问题?
前面是后面的倍数,所有数是最大数的倍数
【6】c++ 的空结构体占多大内存?能不能来定义变量?变量有没有地址?多个空结构体定义的变量内存地址空间是相同的还是连续的?
一个字节 能 有 线性的 class也是如此 c中不能定义空结构体