程序员面试宝典——第五章

本文通过分析C++面试中的经典问题,讲解了赋值语句的使用,特别是全局变量与局部变量的区别,以及i++操作的后置增量细节。同时强调了编程风格中比较重要的条件,如常量赋值错误检查。通过实例解析了代码执行过程,帮助读者理解相关知识点。
摘要由CSDN通过智能技术生成

小编从今天开始看程序员面试宝典这本书了,听老师说这本书上的题都是很经典的面试题,而且之后的很多公司笔试面试好多都从这本书上抽取题,还有原题哦!所以大家也跟我一起来学习吧~~~

下面的总结我会挑我觉得重点的或者是我看懂题目之后的心得和所学的知识把它一一整理出来,如果又不太正确的地方,小伙伴们敬请指正,相互学习呀(嘿嘿🤭)。

5.1赋值语句

:面试例题1:
下列C++代码的输出结果是什么?
A.main()里的i是一个未定义值
B.main()里的i值为1
C.编译器不允许这种写法
D.main()里的i值为0

答案:A

这里main()外的i和main()里的i没有关系,因为在函数内重新定义了一个相同名字的变量,但是没有给值,未定义值。
①:C语言全局变量不可以重复定义,但需要注意的是在C语言函数中,可以定义与全局变量同名的局部变量,此时的全局变量会暂时无效。
②:全局变量是相对于局部变量而言的。全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是从定义该变量的位置开始至源文件结束。
解释:在函数中使用全局变量,一般应作全局变量声明。只有在函数内经过声明的全局变量才能使用。但在一个函数之前定义的全局变量,在该函数内使用可不再加以声明。
③:如果有一个地方对全局变量的值进行了修改,那么其它有用到该变量的地方值都会变成修改后的值。
④:再一个就是全局变量被覆盖的问题了,比如你在某个方法里面又重新定义了一个int shu,那么你原先的全局变量shu就被覆盖掉了,如果需要继续使用全局变量shu的话,必须是这种格式::shu。

5.2 i++

:面试例题2:
以下代码的输出结果是什么?
#include<stdio.h>
main()
{
	int b = 3;
	int arr[] = {6,7,8,9,10};
	int *ptr = arr;
	*(ptr++) += 123;
	printf("%d,%d\n ",*ptr,*(ptr++));
}
A.8 8
B.130 8
C.7 7
D.7 8

答案:A

  • 这道题所考的知识点是小编疏忽的一个地方,如果当时给我面试这道题,那估计就凉了😄,还好现在懂了。这道题主要要掌握printf计算参数时是从右到左压栈的。
    在这里插入图片描述

  • 首先int ptr = arr;表达式执行完后,指针指向第一个格子,然后第二行表达式(ptr++) += 123;由于是后置++,所以先使用后++,所以此时指针的指向还是第一个格子,所以是给6加123最后得129,把第一个格子得值改为了129。然后指针++,移动到第二个格子,这时载打印时,这里要千万注意:printf计算参数时从右到左压栈,所以是先计算*(++ptr),这时指针已经要++到下一个格子了,指针就指向了8,接下来计算第二个表达式*ptr时,此时得ptr指针指向得就是8,所以最后得两个值都是8.

5.3编程风格

第一种:(‘A’ ==a)
第二种:(a == ‘A’)

第一种好一点,如果这时把“==”误写成“=”的话,因为编译器不允许对常量赋值,就可以检查到错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值