看几个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++;
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); }
全部0条评论
快来发表一下你的评论吧 !