请在40分钟内完成以下20道C语言基础题。在没有任何提示的情况下,如果能得满分,那么你可以扔掉本书了,你的水平已经大大超过了作者;如果能的80分以上,说明你的C语言基础还不错,学习本书可能会比较轻松;如果得分在50分以下,也不要气馁,努力学习就行了;如果不小心得了10分以下,你就得给自己悄悄警钟了;如果不幸得了0分,那实在是不应该,因为毕竟很多题是很简单的。
 
C语言基础题(每题5分)。
1. 下面的代码输出时什么?为什么?
 C++ Code 

1

2

3

4

5

6

 
void foo(
void)

{

    
unsigned 
int a = 
;

    
int b = -
;

    (a + b > 
) ? puts(
">6") : puts(
"<=6");

}


2. 下面的代码有什么问题?为什么?
 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

13

 
void foo(
void)

{

    
char string[
], str1[
];

    
int  i;

for(i = 
; i < 
; ++i)

    {

        str1[i] = 
'a';

    }

strcpy(string, str1);

    printf(
"%s\n", string);

}


3. 下面的代码,i和j的值分别是什么?为什么?
 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

 
static 
int j;


int k = 
;

void fun1(
void)

{

    
static 
int i = 
;

    i++;

}


void fun2(
void)

{

    j = 
;

    j++;

}

int main(
void)

{

    
for(
int k = 
; k < 
; ++k)

    {

        fun1();

        fun2();

    }

return 
;

}


4. 下面代码里,假设在32位系统下,个sizeof计算的结果分别是多少?
int *p = NULL;

sizeof(p) = 
sizeof(*p) = 

int a[100];

sizeof(a) = 
sizeof(a[100]) = 
sizeof(&a) = 
sizeof(&a[0]) = 

int b[100];
void fun(int b[100])
{
    sizeof(b) = 
}

5. 下面代码的结果是多少?为什么?
 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 
#include 
"stdio.h"


#include 
"string.h"

int main(
void)

{

    
signed 
char a[
];

    
int i;

for(i = 
; i < 
; ++i)

    {

        a[i] = -i - 
;

    }

printf(
"%d\n", strlen(a));

    
return 
;

}


6. 下面的代码里,哪些内容可被改写,哪些不可被改写?
(1)const int *p;
(2)int const *p;
(3)int * const p;
(4)const int *const p;

7.下面的两端代码又什么区别?什么时候需要使用代码(2)?
代码(1):
int i = 10;
int j = i;
int k = i;

代码(2):

volatile int i = 10;
int j = i;
int k = i;

8. 在32位的x86系统下,输出的值为多少?
 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

13

 
#include 
"stdio.h"

int main(
void)

{

   
int a[
] = {
,
,
,
,
};

   
int *ptr1 = (
int*)(&a + 
);

   
int *ptr2 = (
int*)((
int)a + 
);

printf(
"%x, %x\n", ptr1[-
],*ptr2);

return 
;

}


9. 0x01 <<2+3的值为多少?为什么?

10. 定义一个函数宏,求x的平方

11. 下面的两段代码有什么区别?
代码(1):
struct TestStruct1
{
    char c1;
    short s;
    char c2;
    int i;
};
代码(2):
struct TestStruct2
{
    char c1;
    char c2;
    short s;
    int i;
};

12. 写代码向内存0x12ff7c地址存入一个整形术0x100.

13. 下面代码的值是多少?
 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

 
#include 
"stdio.h"

int main(
void)

{

   
int a[
] = {
,
,
,
,
};

   
int *ptr = (
int*)(&a + 
);

printf(
"%d, %d\n", *(a + 
),*(ptr - 
));

return 
;

}


14. 假设p的值为0x10000,如下表达式的值分别为多少?
struct Test
{
    int     Num;

    char    * pcName;

    short    dDate;

    char    cha[2];

    short    sBa[4];

}* p;

p + 0x1 = 0x    ?
(unsigned long)p + 0x1 = 0x    ?
(unsigned int *)p + 0x1 = 0x    ?

15. 下面代码输出的结果是多少?
 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

 
#include 
"stdio.h"

int main(
void)

{

   
int a[
][
] = {(
,
),(
,
),(
,
)};

   
int *p;

   p = a[
];

   printf(
"%d\n", p[
]);

return 
;

}


16. 下面的代码有什么问题?为什么?
 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

 
void fun(
char a[
])

{

    
char c = a[
];

}

int main(
void)

{

    
char b[
] = 
"abcdefg";

    fun(b[
]);

    
return 
;

}


17. 下面的代码有什么问题?为什么?
 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 
#include 
"stdlib.h"


#include 
"string.h"


struct student

{

    
char *name;

    
int score;

} stu, *pstu;


int main(
void)

{

    pstu = (
struct student *)malloc(
sizeof(
struct student));

    strcpy(pstu->name, 
"Jimy");

    pstu->score = 
;

    free(pstu);

    
return 
;

}


18. 下面的代码输出结果是多少?
 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

13

 
#include 
"stdio.h"


void fun(
int i)

{

   
if(i > 
)

      fun(i/
);

   printf(
"%d\n", i);

}


int main(
void)

{

   fun(
);

   
return 
;

}


19. 下面的代码有什么问题?为什么?
char c;
c = getchar();
if(EOF == c)
{
    ...

}

20. 请写一个C函数,若当前系统是Big_endian的,则返回0;若是Little_endian的,则返回1。

PS:答案回复可见。
O(∩_∩)O~

《C语言深度解剖》面试题整理的更多相关文章

  1. 高质量程序设计指南C/C++语言——C++/C程序设计入门

    1.在C++/C中,全局变量(extern或static)存放在程序的静态数据区中,在程序进入main()之前创建,在main()结束之后销毁,因此在我们的代码中根本没有机会初始化它们,于是语言及其实 ...

  2. 高质量程序设计指南C/C++语言——C++/C程序设计入门(4)

    *switch结构的break语句只是一个“jmp”指令,其作用就是跳到switch结构的结尾处 *标准C++/C语言提供3种循环:do/while.while和for,它们都在条件表达式为TRUE( ...

  3. 指针,数组,字符串的区别(高质量程序设计指南C++/C语言第7章)

    指针: 指针是变量,和平时的那些变量没有本质的差异,不同的只是它的值和类型,.,即解释方式 二进制层面:指针的值是内存单元的地址,而变量是引用内存单元值的别名 语言层面:指针的值就是变量的地址. 对象 ...

  4. 高质量程序设计指南C/C++语言——malloc/free使用要点

  5. 高质量程序设计指南C/C++语言——有了malloc/free为什么还要new/delete?

  6. 高质量程序设计指南C/C++语言——内存管理

    • free()和delete只是把指针所指的内容给释放掉,并没有把指针本身删掉.指针被free()或delete以后其地址仍然不变(不等于NULL),只是该地址对应的内存是垃圾——p成了野指针.如果 ...

  7. 高质量程序设计指南C/C++语言——C++/C常量(2)

  8. 高质量程序设计指南C/C++语言——C++/C程序设计入门(2)

    *标准C规定,编译器只取前31个字符作为有效的标识符,而标准C++则取前255个字符作为有效的标识符. *把具有特殊含义的字符输出到终端上,尤其是当它们出现在普通字符串或格式控制字符串中时,一般来说有 ...

  9. 高质量程序设计指南C/C++语言——C++/C编译预处理

    C++/C的编译预处理器对预编译伪指令进行处理后生成中间文件作为编译器的输入,因此所有的预编译伪指令都不会进入编译阶段.预编译伪指令一般都以#打头,且其前面只能出现空白字符.预编译伪指令不是C++/C ...

  10. 高质量程序设计指南C/C++语言——C++/C常量

随机推荐

  1. openstack第1天

    入门openstack题外篇 老实说,我在写这篇文章的时候,对云的了解还是比较模糊的,也许是刚接触,不管怎样 总得写点什么,写完之后也许数月之后,感觉写的不是那么好,到时候在做修该吧! 今天我们就提一 ...

  2. Servlet学习的两个案例之网站访问次数的统计

    一.统计次数的Servlet源码 package com.shanrengo; import java.io.IOException; import javax.servlet.ServletCont ...

  3. Windows下搭建objective C开发环境

    摘自:http://blog.csdn.net/zhanghefu/article/details/18320827 最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开 ...

  4. Python之路:迭代器和yield生成器

    一.迭代器 对于Python 列表的 for 循环,他的内部原理:查看下一个元素是否存在,如果存在,则取出,如果不存在,则报异常 StopIteration.(python内部对异常已处理) 使用迭代 ...

  5. Mono for Android 显示远程图片

    Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  6. 英文:known good assembly(KGA) / 中文:确认好的组装件,已知好组装件

    英文:known good assembly(KGA) / 中文:确认好的组装件,已知好组装件 正确地操作印制板装配,并可作为标准件与其它同类型装配件比较的组装.也称黄金组装.

  7. Qt configure 参数不完全说明

    只需要加个 -fast参数就ok了.其他参数视自己情况而定,比如你不需要qt3支持可以添加-no-qt3support,或者不需要webkit插件 -no-webkit配置参数选项: 前面是*号的表示 ...

  8. Qt mac QMYSQL(动态加载插件QPluginLoader的用法)

    用此段代码查出问题所在 QPluginLoader loader; loader.setFileName("/Users/danny/Qt5.3.2/5.3/clang_64/plugins ...

  9. TextView textSize 文字大小

    TextView,很常见的控件.关于文字大小的方法有: android.widget.TextView#getTextSize  返回值的单位是PX /** * @return the size (i ...

  10. 数据切分——MySql表分区概述

    定义:         表的分区指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分.实际上,表的不同部分在不同的位置被存储为单独的表.用户所选择的.实现数据分割的规则被称为分区函数,这在M ...