C语言经典笔试题集锦

描述

看几个C语言经典笔试题。

有以下程序,如果 x 等于 254,则函数的返回值是多少?

 

int func(int x) 
{     
    int countx = 0;     
    while(x) 
    {        
        countx ++;        
        x = x & (x - 1);    
    }    
    
    return countx;
} 
 

 

看到这两行代码,应该形成条件反射,看似复杂, 实则是在计算 x 的二进制表示中 1 的个数,254 的二进制是这样的,一共有 7 个 1

第二个,经典的 define 和 typedef 的区别。

define 属于宏定义,预处理的时候替换,于是 a 和 b 变成了这样,a 是指针,b 是整数。typedef 声明的是一种类型,c 和 d 都属于 int_ptr 类型,就是 int * 类型,两个都属于指针。

执行下列语句后,变量 x 和 y 的值是多少?

 

y = 10;
x = y++;
 
后置 ++ 的特点,语句执行完再赋值。x 还是 10,y 最后要加一,变成了11。

执行以下代码,程序的输出是?
int main()
{    
    for(int i = 0; i < 3; i++)    
    {        
        switch(i)        
        {        
            case 0:            
                printf("%d",i);        
            case 2:            
                printf("%d",i);        
            default:            
                printf("%d",i);        
        }    
    }    
    return 0;
}
 

 

考察 switch 语句的基本语法,没有 break,程序会一直向下执行。i 等于 0,匹配到 case 0,输出0,因为没有 break,下面的两个 printf 都会被执行,又输出两个 0。i 等于 1,没有匹配,

执行最后的 default ,输出一个 1。i 等于 2,匹配到 case 2,输出 2, 同样因为没有 break,下面的 printf 也会输出 2。

执行以下代码,在32位系统中,程序的输出是?

 

void Func(char str_arg[2])
{    
    int m = sizeof(str_arg);    
    int n = strlen(str_arg);    
    printf("%d
", m);    
    printf("%d
", n);
}


int main(void)
{    
    char str[] = "Hello";    
    Func(str);
}
 

考察 strlen 和 sizeof 的用法。虽然形参看起来是个数组,但是对于编译器来说,一旦它作为参数,就是当作指针来处理。sizeof的结果是4,strlen 的结果是 5。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分