linux开发--1.C语言常见问题总结

1140阅读 0评论2016-07-08 wangcong02345
分类:LINUX

1. error: variable-sized object may not be initialized
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main ( int argc, char *argv[] )
  4. {
  5.     const int n = 5;
  6.     int a[n]={1,2,3,4,5};
  7.     return EXIT_SUCCESS;
  8. }
c规定数组大小为常量,变量n被修饰为只读变量,可惜再怎么修饰也不是常量
详细见: 
2. x ? : y   是什么鬼
  1. x ? : y 等同于 x ? x : y

3. 指针运算 
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main (int argc, char *argv[])
  4. {
  5.     int* ip1, *ip2, iv;
  6.     char* cp1, *cp2, cv;
  7.     ip1 = (int*)0x518;
  8.     ip2 = (int*)0x500;
  9.     iv = ip1 - ip2;
  10.     printf("iv=%d\n", iv);

  11.     cp1 = (char*)0x518;
  12.     cp2 = (char*)0x500;
  13.     cv = cp1 - cp2;
  14.     printf("cv=%d\n", cv);

  15.     return 0;
  16. }
这个例子出自《经典C面试真题精讲》.(李亚锋) P11 107指针运算
iv=24/4=6 cv=24/1=24
对于整数指针当它自加或自减时,实际上移动的是4个字节
4.结构体
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. typedef struct __HEAD__
  5. {
  6.     char c;
  7.     int num;
  8. }__attribute__ ((__packed__)) HEAD;

  9. typedef struct __HEAD2__
  10. {
  11.     char c;
  12.     int num;
  13. }HEAD2;

  14. int main (int argc, char *argv[])
  15. {
  16.     printf("pack=%d,nopack=%d\n", sizeof(HEAD),sizeof(HEAD2));
  17.     return 0;
  18. }
pack=5,nopack=8




上一篇:libjpeg库分析----4.rgb转yuv
下一篇:libjpeg库分析----5.提取出的fdct算法