你必须知道的----C语言笔试面试中经典易错的一些知识点(持续更新)
1. 关于二级指针的解析和引用
1.1 二级指针意义
二级指针存放的是一级指针的地址 Ex:
Int a = ;
Int *p = &a;
Int **q = &p;
1.2. 为啥要用二级指针
如果将一个指针作为形参传入某个函数,并在函数体内进行判断,改变该指针的指向,形参必须设置为二级指针,也就是将原指针的地址传入才可以,否则,根据函数体在临时栈中执行,如不传入地址,它使用的是形参指针在栈中的一个copy,函数体执行完毕后,即被释放掉
2. 关于指针的类型指向
a. 指针是有类型的,其类型决定了指针+1,越过多少个内存单元
b. Char *p | p+1,实际增加一个内存单元
c. Int *p | p+1,实际增加四个内存单元
3. C语言的压栈顺序是自右向左压,因此在面对打印形参指针的时候,要注意从右向左边看
4. “=”连续赋值是从右向左边赋的
5. sizeof()在计算数组的长度的时候,计算数组中有的字符的个数,但是不会计算字符串最后的‘\0’
Char str[]="hello"
Sizeof(str) = 6 //列出C中会用到的关键字的长度
Sizeof(char) = 1
Sizeof(short) = 2
Sizeof(int) = 4
Sizeof(double) = 8
Sizeof(long long) = 8
6. 关于指针的几种定义方式
a. 一个有10个指针的数组,该指针是指向一个整型数的;
1) int * a[10]
b. 一个指向有10个整型数数组的指针;
1) int (*a)[10]
c. 一个指向函数的指针,该函数有一个整型参数并返回一个整型数;
1) int (*a)(int)
d. 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;
1) int (*a[10])(int)
7. 单纯的指针变量如果仅仅声明并且指向了一个指向,并没有开辟相应的内存,且如果指针直接指向一个字符串常量,那么该段空间分配在文字常量区,是不可修改的
ex: int *ptr = "hello"; ptr[1] = 'c' 这样的赋值是非法操作
8. 希望程序跳转到0x100000去执行
* (void (*)())0x100000
(void (*)()) 将0x100000强制转换成函数指针类型,再通过*取该地址里所存储的函数的入口地址
9. switch的参数不可以为实型,同时switch在执行的时候,请注意如下规则:
int a = ;
int b = ;
switch(b):
{
case :
a = ;
printf("a = %d\n", a);
break;
case :
a = ;
printf("a = %d\n", a);
case :
a = ;
printf("a = %d\n", a);
break;
default:
a = ;
printf("a = %d\n", a);
}
输入:b=1 输出:a=1
输入:b=2 输出:a=2, a=3
输入:b=3 输出:a=3
输入:b=4 输出:a=4
10. 中断服务函数1)不可以有返回值,2)也不可以传参数,3)中断函数中做浮点运算不划算,4)最好不要使用printf函数
11. 无符号型数字和有符号型数字放在一起运算的时候,会强制转换为无符号型
12. strcpy函数本身就可以实现copy,为何返回char *的类型: 伟大的链式表达
13. 堆和栈的区别?
a. 存储内容不同
i. 栈中存放局部变量还有参数,以及调用函数的入口地址 堆中那种由程序员具体指配
b. 管理方式不同
i. 栈由系统自动分配并释放内存,生存周期结束后被自动释放,堆需要程序员指定大小手动申请和手动释放
c. 空间大小不同
i. 栈的空间小,堆的空间根据系统的有效虚拟内存有关,比较灵活空间也比较大
d. 是否会产生随便不同
i. 栈是连续的,不会产生碎片 堆是链表的存储方式,会产生碎片
e. 生长方向不同
i. 栈向低地址扩展域 堆向高地址扩展
f. 分配方式不同
i. 栈有静态和动态分配 堆是动态分配
g. 分配效率不同
i. 栈分配的速度比较快,程序员无法控制 堆速度慢,容易产生碎片
14. volatile和register
a. volatile是一种类型修饰符,用它修饰的变量表示有可能被编译器优化,从而导致有些进程或者程序取用该值时得不到真实的值
b. 对于某些高频使用的变量可以声明为register类型,表明该变量会存储CPU的寄存器中,而不是通过内存寻址访问,以提高效率。
15. 大端和小端的问题
Intel support 小端
Motorola support 大端
ARM both support
Ex: Int a = 0x12345678
16. 线程与进程的区别和联系?线程是否具有相同的堆栈?dll是否有独立的堆栈
17. 对于一个频繁使用的短小函数: C语言中使用宏定义,C++中使用inline
18. 软件测试都有哪些种类
黑盒:针对系统功能的测试 白盒: 测试函数功能,各函数接口
你必须知道的----C语言笔试面试中经典易错的一些知识点(持续更新)的更多相关文章
- C++笔试易错题集(持续更新)
1.如下代码输出结果是什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include<stdio.h> char *myString() { ...
- 找工作笔试面试那些事儿(13)---操作系统常考知识点总结 ZZ 【操作系统】
http://blog.csdn.net/han_xiaoyang/article/details/11285485 上一节对数据库的知识做了一个小总结,实际找工作过程中,因为公司或单位侧重点不一样, ...
- 前端笔试面试中的常用知识点总结(CSS)
1.CSS选择器的优先级!important > 内联 > id选择器 > 类选择器 > 标签选择器多个类选择器叠加(256)之后的优先级大于一个id选择器!importan ...
- 面试宝典:Java面试中最高频的那20%知识点!
Java目前已经不仅仅是一门开发语言,而是一整套生态体系. 作为一个Java程序员,既是幸运的,也是不幸的.幸运的是我们有很多轮子可以拿过来用,不幸的是我们有太多的轮子需要学习. 但是,无论是日常工作 ...
- c语言定义的几种易错的说明
int p; //一个整数 int p [5]; //一个包含5个整数的数组 int * p; //指向整数的指针 int * p [10]; //一个包含10个整数指针的数组 int ** p; / ...
- [C语言]小知识点 持续更新
2019-11-24 1.如果输入: printf(,)); 会得到0: 这和我们的日常判断不相符! 然而,改成: printf(,)); 就可以成功输出“2”: 因此,注意pow函数返回的是浮点数, ...
- leetcode 刷500道题,笔试/面试稳过吗?谈一谈这些年来算法的学习
想要学习算法.应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗? 这里我说下我的个人看法,我认 ...
- catalan数及笔试面试里那些相关的问题(转)
一.catalan数由来和性质 1)由来 catalan数(卡塔兰数)取自组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项 ...
- 找工作笔试面试那些事儿(16)---linux相关知识点(1)
linux这部分的知识倒不是笔试面试必考的内容,不过现在很多公司开发环境都在linux系统下,一些简单的知识还是需要了解一下的,笔试面试中万一碰到了,也不会措手不及.作为菜硕的我,又因为读研期间的项目 ...
随机推荐
- 「小程序JAVA实战」 小程序wxss样式文件的使用(七)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-07/ 细说下微信小程序的wxss样式文件.源码:https://github.com/liming ...
- Emgu学习之(一)----Emgu简介
OpenCV OpenCV是一个开源的跨平台的计算机视觉库,它的设计目标时执行速度尽量快,主要关注实时应用.可以运行在Linux.Windows.Mac OS.Android.IOS.Maemo.Fr ...
- UnityGUI Keynote
[UnityGUI Keynote] 1.GUI.Label控件可以用来显示texture: 更通用的作法是用label来显式texture. 2.GUI.Button可以显示texture.stri ...
- java基础之JDBC二:原生代码基础应用
JDBC的基础应用CURD: 增删改 public void noQuery() { Connection conn = null; Statement stat = null; try { //注册 ...
- Eclipse下使用Subversion(SVN工具)
本文目的 让未使用过版本控制器软件或者未使用过subversion软件的人员尽快上手. subversion的使用技巧很多,这里只总结了最小使用集,即主要的基本功能,能够用来应付日常工作. 因此不涉及 ...
- servlet01 项目demo、servlet生命周期
1 环境说明 jdk: 1.8 tomcat: 8.0 2 项目demo 2.1 新建一个动态的web项目 2.2 新建一个servlet类 该类必须继承 HttpServlet 技巧01:Htt ...
- IFC标准是为了满足建筑行业的信息交互与共享而产生的统一数据标准,是建 筑行业事实上的数据交换与共享标准。本文概要介绍了IFC标准的产生及发展 历程,IFC的整体框架结构,简要说明了IFC标准的实现方法和过程,描述了 当前的应用以及我们应该更加积极地利用IFC标准为建筑软件行业服务。
- 283. Move Zeroes把零放在最后面
[抄题]: Given an array nums, write a function to move all 0's to the end of it while maintaining the r ...
- ubuntu opencv的使用
博客转载自:https://blog.csdn.net/u012816621/article/details/51732932 CMakeLists.txt # cmake needs this li ...
- algorithm notes
1.算法可视化 https://visualgo.net/en