8-25号C考核讲座 认识

来源:互联网 发布:视频播放器推荐 知乎 编辑:程序博客网 时间:2024/04/28 18:31

*********************************************************************

设有如下的程序段:

Code:
  1. char str[5]="Hello";   
  2.   
  3. char *ptr;   
  4.   
  5. ptr=str;   
  6.   

执行上面的程序段后,*(ptr+5)的值为 【 C

A) 'o'              B) '/0'     C) 不确定的值       D) 'o'的地址

####

此处如果声明的数组是 char str[]="hello";的话,答案就变成了B

*********************************************************************

 阅读下列程序:

Code:
  1. void foo()   
  2.   
  3. {   
  4.   
  5. unsigned int a = 6;   
  6.   
  7. int b = -20;   
  8.   
  9. (a+b > 6) ? puts("> 6") : puts(" < = 6");   
  10.   
  11. }    

调用foo()的输出结果是:           >6          

无符号 和 有符号相加 强制转换成 无符号  所以>6

*********************************************************************

经典算法算X的N次方

Code:
  1. int     foo   (   int   x   ,   int     n)    
  2. {    
  3.     int   val;    
  4.     val   =1;    
  5.     if   (n> 0)      
  6.     {    
  7.         if   (n%2   ==   1)     val   =   val   *x;    
  8.         val   =   val   *   foo(x*x   ,   n/2);    
  9.    }    
  10.    return   val;    
  11. }   

*********************************************************************

下面程序的输出是      9      //不怎么懂这题

Code:
  1. void foo(int [][3] );    
  2.   
  3. main()    
  4.   
  5. int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};   
  6.   
  7. foo(a);    
  8.   
  9. printf("%d" , a[2][1]);    
  10.   
  11. }    
  12.   
  13. void foo( int b[][3])    
  14.   
  15. { ++ b;    
  16.   
  17. b[1][1] =9;   
  18.   
  19. }   

 

理解为foo函数把数组的行的首地址往后移,三个int的长度于是指向4然后把8的位置 赋值成9

*********************************************************************

32位机, 有以下定义:

Code:
  1. Code:   
  2.    char *pmsg = "A";      
  3.      
  4.    char msg[] = "A";      
  5.      
  6. 问:      
  7.      
  8. sizeof(pmsg) =  【   4    】        sizeof(msg)  =  【   2    】      
  9.      
  10. void f1(char param[100])      
  11. {   printf("sizeof(param) = %d /n",sizeof(param)); }  
调用函数f1后,输出为:   sizeofparam= 4    

sizeof(pmsg)是通常的得到指针的长度,所以是4字节,

sizeof(msg)是球数组长度,后面加‘/0’所以是2字节,

sizeof(param)中函数入参带维数的,都把数组看成是指针,所以还是4字节

*********************************************************************

 已有定义如下:

unsigned char data = 0x55;

运算 data^0xAA 的结果是:   0xFF           运算 (data>>4)&0xAA 的结果是:    0x00     

运算 (data<<9)|0xAA  的结果是:    0xAAAA    

最后一个data左移九位,自动提升到32位进行运算,所得到32位的0x0000AAAA,显示为AAAA

*********************************************************************

Code:
  1. char *pmsg = "hello, world!";   
  2.   
  3.   strcpy(pmsg, "hi, there.");    

试评论该代码。

char *pmsg = "hello, world";此处是指针申明,会在常量区找空间保存,不能对其进行操作,只能调用,声明成数组的话能操作。

 

*********************************************************************