小编从今天开始看程序员面试宝典这本书了,听老师说这本书上的题都是很经典的面试题,而且之后的很多公司笔试面试好多都从这本书上抽取题,还有原题哦!所以大家也跟我一起来学习吧~~~
下面的总结我会挑我觉得重点的或者是我看懂题目之后的心得和所学的知识把它一一整理出来,如果又不太正确的地方,小伙伴们敬请指正,相互学习呀(嘿嘿🤭)。
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’)
第一种好一点,如果这时把“==”误写成“=”的话,因为编译器不允许对常量赋值,就可以检查到错误。