自定义类型

字节对齐

 

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\n",p+1);    //2012
printf("%d\n",(unsigned long)p+1);//2001
printf("%d\n", (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中不能定义空结构体