c++ system不明确_普通程序小白三年月薪上万,C语言你不可以错过的8个经典面试题目!...

C语言你不可以错过的8个经典题目

一下这些都是C语言中较为经典的例题,可以帮助大家在写程序中少走弯路,少出点BUG。

1. 一下叙述中不正确的是(D)

A.在不同的函数中可以使用相同名字的变量

B.函数中的形式参数是在栈中保存

C.在一个函数内定义的变量只在本函数范围内有效

D.在一个函数内复合语句中定义的变量在本函数范围内有效

(复合语句值函数中的成对括号构成)

注:D项是有错误的比如我举个例子

#include

int man()

{

{

int a=10;

}

printf("%d ",a);

return 0;

}

这个如果再编译中,一定会出现,a未定义的错误的。

2.

#include

#include

int main()

{

int i;

char acNEW[20];

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

{

acNEW[i] = '0';

}

printf("%d ", strlen(acNEW));

system("pause");

return 0;

}

问题是求输出结果: 这个答案应该不确定,因为呢它在为字符数组赋值时,并未赋 '' 但是strlen函数

认为结束的标准就是 '' ,所以当它读到最后一位他会继续走下去,直到它遇到 '',因为后面是垃圾数据

数据都是随机的所以strlen函数在读时直到遇到 '' 它才会停下来,所以答案是不确定的。

 3.全局变量可以定义在被多个.c文件包含着的头文件中? 错误

这个在编译时会报错的,但是如果使用static修饰就可以编译通过。

4.

在X86下,有这些程序:

#include

#include

int main()

{

union

{

short k;

char i[2];

}*s,a;

s = &a;

s->i[0] = 0x39;

s->i[1] = 0x38;

printf("%x ", a.k);

system("pause");

return 0;

}

这道题问的是输出的什么?这里牵扯的知识点 联合体和大小端存储,x86是小端存储,这种东西就得靠记了。。没办法大家都知道联合体空间公用对吧,short长度为2B,char i[2]长度也为2B.所以你的a.k虽然并未赋值,但是你等于输出了char i[2]数组中的内容,他们虽然名字不同现在他们内容是一样的。 这就考验我们大小端的概念了。

接下来下面是我画的这道题的理解图:

1f31151216f976e10a4df224d4769b12.png

大家也知道读取数据一般是从高位开始读,比如一个数字 120 我们肯定是先看他最大的位对吧(高位)

所以这道题的答案是 3839

我再截图验证一下:

f71704193fe540083a1d72772d718193.png

5.求下列程序输出结果

#include

#include

int main()

{

unsigned char a = 200;

unsigned char b = 100;

unsigned char c = 0;

c = a + b;

printf("%d %d", a + b, c);

system("pause");

return 0;

}

这道题主要考的是你对unsigned的理解,接下来我画一张图帮大家理解

505815f224f9c2f6c6ade869bcedca89.png

现在我说的对不对呢? 大家看看输出结果

50911eb94b05dc1005db9d9761d73290.png

 6.在x86,vc++ 6.0环境下,有下列程序

#include

#include

int main()

{

char c;

unsigned char uc;

unsigned short us;

c = 128;

uc = 128;

us = c + uc;

printf("0x%x ", us);

us = (unsigned char)c + uc;

printf("0x%x ", us);

us = c + (char)uc;

printf("0x%x ", us);

system("pause");

return 0;

}

做这道题前应该知道 char 的取值范围是-128 ~ 127,所以当你给uc赋128的时候,它真实的值为-128.

74d8a2ea5f797a8b7e5a570772ebeea5.png

具体我说的对不对? 看看运行结果。

863dff903fb37ddec17afd0d6ab48f0d.png

7.

#include

#include

struct tagAAA

{

unsigned char ucld : 1;

unsigned char ucpara : 2;

unsigned char ucState : 6;

unsigned char ucTail : 4;

unsigned char ucAvail;

unsigned char ucTail2;

unsigned char ucData;

}AAA_S1;

struct tagAAA2

{

unsigned int ucld : 1;

unsigned int ucpara : 2;

unsigned int ucState : 6;

unsigned int ucTail : 4;

unsigned int ucAvail;

unsigned int ucTail2;

unsigned int ucData;

}AAA_S2;

int main()

{

printf("%d %d ", sizeof(AAA_S1), sizeof(AAA_S2));

system("pause");

return 0;

}

求AAA_S再分别为1字节对齐和四字节对齐的情况下,占用空间的大小:?

答案为 6 16.

这个问题就是位域的问题,我有专门关于结构体对齐的博客,不懂可以过去看一看。

 8.

#include

#include

#pragma pack(4);

int main()

{

unsigned char puc[4];

struct sagPIM{

unsigned char ucpim1;

unsigned char ucDate:1;

unsigned char ucDate1:2;

unsigned char ucDate2:3;

}*pstPimData;

pstPimData = (struct sagPIM*)puc;

memset(puc, 0, 4);

pstPimData->ucpim1 = 2;

pstPimData->ucDate = 3;

pstPimData->ucDate1 = 4;

pstPimData->ucDate2 = 5;

printf("%02x %02x %02x %02x ", puc[0], puc[1], puc[2], puc[3]);

system("pause");

return 0;

}

这个主要还是位域,还有存储的一些关系了。

因为按照位域存储,该结构体只需要2个字节即可存储全部内容,然后开始思考他内部的结构。

下来我画一个图理解一下。

再看看运行的结果吧 有图有真相。

这些题目都很经典,可以帮助我们理解一些藏在深处的知识,各种坑各种容易犯的错误。。

2a216aaebfeb6d8fefd04d1d85efb7e5.png

如果你想了解C++,想学习C++请关注微信公众号:游戏开发教程

推荐关注我的微信公众号“游戏开发教程”里面我写了很多学习建议和学习方法、学习规划,还有清晰的系统学习路线图,希望可以帮助大家!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值