你必须知道的----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微信公众平台开发(五)--文本及图文消息回复的实现
转自:http://www.cuiyongzhi.com/post/43.html 上篇我们说到回复消息可以根据是否需要上传文件到微信服务器可划分为[普通消息]和[多媒体消息],这里我们来讲述普通消息 ...
- 由ffmpeg中avformat模块中的 URL_SCHEME_CHARS 看 strspn( ) 的妙用
在ffmpeg的avformat 模块中avio.c 对 URL_SCHEME_CHARS 的定义: #define URL_SCHEME_CHARS \ "abcdefghijklmnop ...
- .Net Core 迁移之坑一 《WebAPI Get请求参数传入输入带有[]不识别问题》
在Framwork 体系下 WebAPI项目 会有很多默认特性,例如:Get查询竟然支持三种数组查询方式 1.https://localhost:44390/api/values?status=1&a ...
- sql server生成递归日期、连续数据
WITH Date AS ( SELECT CAST('2008-08-01' AS DATETIME) da UNION ALL FROM Date WHERE da < '2008-08-2 ...
- 非常详细的ok6410的linux系统移植…
目录 Linux 3.3.5系统移植 2 LED驱动移植 8 按键驱动移植 9 LCD驱动移植 11 DM9000网卡驱动移植 14 搭建NFS网络文件系统 25 移植触摸屏驱动 38 移植Qt4.8 ...
- Python函数之返回值、作用域和局部变量
一.函数返回值 说到返回值,相信大家肯定都认识,没错,就是return. 所谓返回值可以这样理解:函数外部的代码要想获取函数的执行结果,就可以在函数里用return语句把结果返回. 那具体怎么用呢?接 ...
- Redis搭建(四):Sharding集群模式
一. 方案 1. 介绍redis集群分为服务端集群(Cluster)和客户端分片(Sharding)服务端集群:redis3.0以上版本实现,使用哈希槽,计算key的CRC16结果再模16834.此处 ...
- Gym 101350G - Snake Rana
题意 有一个n*m的矩形,里面有k个炸弹,给出每个炸弹的坐标,计算在n*m的矩形中有多少子矩形内是不包含炸弹的. 分析 场上很是懵逼,赛后问学长说是容斥定理?一脸懵逼..容斥不是初中奥数用在集合上的东 ...
- 【bzoj2818】Gcd
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4344 Solved: 1912[Submit][Status][Discuss ...
- OS线程模型
线程模型 N对1 内核线程 映射 用户进程, 用户进程里可以启多个线程 1对1 内核线程和用户线程 1对1 Linux采用这种方式 N对M 用户线程被抽象为更轻量的线程, 内核线程和轻量的线程对应 进 ...