1 写在前面的小测试

本系列主要讲的是 C 语言的一些深入的知识,故在开始之前大家可以先完成这个小测试,如果你对下面的题目感觉毫无压力,那么你对于 C 语言基础的掌握已经比较牢固了。

    1. 下面代码的输出是什么?
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int a[3][2] = { (0,1), (2,3), (4,5) } ;
  6. int *p ;
  7. p = a[0] ;
  8. printf(“%d”, p[0]) ;
  9. }

    1. int a[10]; 问下面哪些不可以表示 a[1] 的地址?
      A. a+sizeof(int)
      B. &a[0]+1
      C. (int)&a+1
      D. (int
      )((char*)&a+sizeof(int))

    1. 下面的C程序是合法的吗?如果是,那么输出是什么?
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int a=3, b = 5;
  6.  
  7. printf(&a["Ya!Hello! %s\n"], &b["junk/super"]);
  8.  
  9. printf(&a["WHAT%c%c%c %c%c %c !\n"], 1["this"],
  10. 2["beauty"],0["tool"],0["is"],3["sensitive"],
  11. 4["CCCCCC"]);
  12.  
  13. return 0;
  14. }

    1. 32 位机上根据下面的代码,问哪些说法是正确的?(多选题类型)
      signed char a = 0xe0;
      unsigned int b = a;
      unsigned char c = a;
      A. a>0 && c>0 为真
      B. a == c 为真
      C. b 的十六进制表示是:0xffffffe0
      D. 上面都不对

    1. 下面程序的输出结果(32位小端机)
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. long long a = 1, b = 2, c = 3;
  6. printf("%d %d %d\n", a, b, c);
  7. return 0;
  8. }

    1. 请问下面的程序的输出值是什么?
  1. #include <stdio.h>
  2.  
  3. #include <stdlib.h>
  4.  
  5.  
  6. #define SIZEOF(arr) (sizeof(arr)/sizeof(arr[0]))
  7.  
  8. #define PrintInt(expr) printf("%s:%d\n",#expr,(expr))
  9.  
  10.  
  11. int main()
  12. {
  13. int pot[] = {
  14. 0001,
  15. 0010,
  16. 0100,
  17. 1000
  18. };
  19. int i;
  20. for(i=0;i<SIZEOF(pot);i++)
  21. PrintInt(pot[i]);
  22.  
  23. return 0;
  24. }

    1. 请问下面的程序的输出值是什么?
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. char a[1000] ;
  6. int i ;
  7. for(i=0; i<1000; i++)
  8. {
  9. a[i]= -1-i ;
  10. }
  11. printf(“%d”,strlen(a)) ;
  12.  
  13. return 0 ;
  14. }

    1. 下面这段代码会挂么?会挂在哪一行?
  1. #include <stdio.h>
  2.  
  3. struct str{
  4. int len;
  5. char s[0];
  6. };
  7.  
  8. struct foo {
  9. struct str *a;
  10. };
  11.  
  12. int main(int argc, char** argv) {
  13. struct foo f = {0};
  14. if (f.a->s) {
  15. printf( f.a->s);
  16. }
  17. return 0;
  18. }

    1. 在X86系统下,输出的值为多少?
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int a[5] = {1,2,3,4,5} ;
  6. int *ptr1 = (int *)(&a+1) ;
  7. int *ptr2 = (int *)((int)a+1) ;
  8.  
  9. printf(“%x,%x”,ptr1[-1], *ptr2) ;
  10. return 0 ;
  11. }

    1. 请问下面的程序的输出值是什么?
  1. #include <stdio.h>
  2.  
  3.  
  4. int main()
  5. {
  6. int a[5][5] ;
  7. int (*p)[4] ;
  8. p = a ;
  9. printf("%d", &p[4][2]-&a[4][2]) ;
  10.  
  11. return 0 ;
  12. }

    1. 以下代码在 windows 系统下成员 i 的偏移量是多少?在 Linux 系统下 i 的偏移量是多少?
  1. struct S
  2. {
  3. char c ;
  4. int i[2];
  5. double v ;
  6. } ;

    1. 下面代码中有BUG,请找出
  1. int tadd_ok(int x, int y) //判断加法溢出
  2. {
  3. int sum = x+y ;
  4. return (sum-x == y) && (sum-y == x) ;
  5. }
  6. int tsub_ok(int x, int y) //判断减法溢出
  7. {
  8. return tadd_ok(x, -y) ;
  9. }

    1. 下面变量的核心是什么,并用多个typedef改写下面的声明式
      int (((abc) ( ) ) [6]) ( ) ;

    1. ((void()( ))0 )( ) 这是什么?

    1. 编写一些代码,确定一个变量是有符号数还是无符号数

以上问题的参考答案点击