《C语言深度解剖》面试题整理
请在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 = 6; int b = - 20; (a + b > 6) ? 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[ 10], str1[ 10]; int i; for(i = 0; i < 10; ++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 = 0; void fun1( void) { static int i = 0; i++; } void fun2( void) { j = 0; j++; } int main( void) { for( int k = 0; k < 10; ++k) { fun1(); fun2(); } return 0; } |
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[ 1000]; int i; for(i = 0; i < 1000; ++i) { a[i] = -i - 1; } printf( "%d\n", strlen(a)); return 0; } |
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[ 5] = { 1, 2, 3, 4, 5}; int *ptr1 = ( int*)(&a + 1); int *ptr2 = ( int*)(( int)a + 1); printf( "%x, %x\n", ptr1[- 1],*ptr2); return 0; } |
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[ 5] = { 1, 2, 3, 4, 5}; int *ptr = ( int*)(&a + 1); printf( "%d, %d\n", *(a + 1),*(ptr - 1)); return 0; } |
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[ 3][ 2] = {( 0, 1),( 2, 3),( 4, 5)}; int *p; p = a[ 0]; printf( "%d\n", p[ 0]); return 0; } |
16. 下面的代码有什么问题?为什么?
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 |
void fun(
char a[
10])
{ char c = a[ 3]; } int main( void) { char b[ 10] = "abcdefg"; fun(b[ 10]); return 0; } |
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 = 99; free(pstu); return 0; } |
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 > 0) fun(i/ 2); printf( "%d\n", i); } int main( void) { fun( 10); return 0; } |
19. 下面的代码有什么问题?为什么?
char c;
c = getchar();
if(EOF == c)
{
...
}
20. 请写一个C函数,若当前系统是Big_endian的,则返回0;若是Little_endian的,则返回1。
PS:答案回复可见。
O(∩_∩)O~