void const return 结构体对齐

void 不能代表一个真实的变量,因为定义变量必须分配内存空间。 

  return return不能指向"栈内存"的"指针",因为该内存在函数体结束时被自动销毁。 

  return; 返回的是什么呢? 

  const 命名被替换为 readonly 或许更好。 

  修饰只读变量;节省空间,避免不必要的内存分配,同时提高效率(编译器通常不为普通const只读变量分配存储空间,而是将它们保存在符号表中,这使得它成为编译期 

  间的值,没有了存储与读内存的操作,使得它的效率也很高。const只给出了相应的内存地址,而define给出的是立即数,所以const定义的只读变量在程序运行过程中只 

  有一份备份(因为它是全局的只读变量,存放在静态区),而define定义的宏常量在内存中有若干个备份。define宏是在预编译阶段进行替换,而const修饰的只读变量是在 

  编译的时候确定其值。define没有类型,而const修饰的只读变量具有特定的类型。 

  修饰一般变量,一般变量是指简单类型的只读变量。 int const i = 2; or const int i = 2; 

  修饰数组,int const a[5] = { 1,2,3,4,5 }; 或者 const int a[ 5 ] = { 1,2,3,4,5 }; 

  修饰指针,const int*p ; // p可变,p指向的对象不可变 

  int const*p ; // p可变, p指向的对象不可变 

  int *const p; // p不可变,p指向的对象可变 

  const int *const p; // p不可变,p指向的对象也不可变 

  修饰函数的参数 void Fun( const int i ); i在函数体中不能改变 

  修饰函数的返回值,返回值不可变,const int Fun( void ); 

  在另一链接文件中引用const只读变量: extern const int i ; //声明 

  volatile volatile是易变的、不稳定的意思。volatile和 const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、其他线程等。 

  遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问(比如寄存器变量,表示一个端口数据或者多个线程的 

  共享数据)。 

  extern extern 可以置于变量或函数前,以表明变量或函数的定义在别的文件中。 

  struct 空结构体多大?一个struct就是一个模子,模子大小不会为0,sizeof(empty class) = 1(字节) 

  柔性数组( flexible array )。C99中,结构中的最后一个元素允许是未知大小的数组,这就叫柔性数组成员,但结构体中的柔性数组成员前面必须至少有一个其他成员。 

  柔性数组允许结构中包含一个大小可变的数组。sizeof()的时候,不包括柔性数组的内存。 

  union 与struct用法类似。union所有数据成员具有形同的起始地址,默认属性是public。 

  大小端模式对union类型数据的影响。 

  大端模式:字数据的高字节存储在低地址中 ,而字数据的低字节则放在高地址中。 

  小端模式:字数据的高字节存储在高地址中 ,而字数据的低字节则放在低地址中。 

  如何用程序确认当前系统的存储模式: 

  int checkSystem() { 

  union check{ 

  int i; 

  char ch; 

  }c; 

  c.i = 1; 

  return (c.ch==1); // 1 小端模式 

  } 

  enum 枚举类型,其实是个很有用的数据类型。 

  enum Color{ 

  Green = 1, 

  Red , 

  Blue = 10, 

  TT 

  }ColorVal; 

  Green = 1, Red = 2, Blue = 10, TT = 11 

  枚举与#define宏的区别 

  ① define宏常量是在预编译阶段进行简单替换;枚举常量则是在编译的时候确定其值 

  ② 一般在编译器里,可以 调试 枚举常量,但是不能 调试 宏常量 

  ③ 枚举可以一次定义大量的相关的常量,而define一次只能定义一个 

  sizeof( Color ) = 4 

  typedef 给一个已经存在的数据类型(不是变量)取一个别名。 

  typedef struct s{ 

  ; 

  }Stu,*pStu; 

  const pStu stu_1; const 修饰的对象是 stu_1这个指针 ,因为把 pStu当成了一个整体,相当于 int 

  pStu const stu_2; 同上 

  符号 

  注释符号 int/*...*/i; 对的,空格代替了注释 

  char * s = "abcdefgh //hijklmn"; //在这里不是注释 

  //is it a\ 

  valid comment? 

  上面两行是合法的注释,不过不建议那样写 

  in/****/t i; 这条注释是错的,被空格替换 

  /* */不能嵌套使用 

  y = x/*p; 

  /* 表示注释的开头,没有找到对应的 */, 所以会报错,不能表示 x 除以 p指向的内容, 要想表示,可以这样写, x/(*p) 或者 x/ *p; 

  接续符号和转义符 

  C语言里以反斜杠(\)表示断行,编译器会将反斜杠剔除掉,跟在反斜杠后面的字符自动接续到钱一行。注意:反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格。 

  反斜杠还可以表示转义字符的开始标识。 

  单引号、双引号 1 '1' "1" 

  逻辑运算符 || 和 && 是我们经常用到的逻辑运算符,与按位运算符 "|" 和 "&"是两码事 

  位运算符 & | ^ ~(按位取反) << >> 

  0x01<<2+3 == 0x01<<5 

  ++、--操作符 

  int i = 0; 

  for( i=0,printf("First = %d\n",i); printf("Second %d\n",i),i<10 ;i++,printf("Third = %d\n",i ) ) { 

  printf("Fourth = %d\n", i ); 

  } 

  int i = 3;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值