你必须知道的----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系统下,一些简单的知识还是需要了解一下的,笔试面试中万一碰到了,也不会措手不及.作为菜硕的我,又因为读研期间的项目 ...
随机推荐
- zookpeer的安装与配置
zookpeer集群搭建: 集群搭建过程简介: 这里准3台服务器做zk(zookpeer下面简称zk)集群搭建: zk集群由一个leader和两个follower组成,对外端口默认为2181端口,关于 ...
- Java多线程-线程的调度(让步)
线程的让步含义就是使当前运行着线程让出CPU资源,但是扔给谁不知道,仅仅是让出,线程状态回到可运行状态. 线程的让步使用Thread.yield()方法,yield()为静态方法,功能是暂停当前正在执 ...
- solr java api 使用solrj操作zookeeper集群中的solrCloud中的数据
1 导入相关的pom依赖 <dependencies> <dependency> <groupId>org.apache.solr</groupId> ...
- mysql数据库中插入表情4个字节的
这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 我的解决方案是这样的 1.在mysql ...
- web 应用中访问 Spring 具体实现
user=LF password=LF jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl driverClass=oracle.jdbc.driver.Ora ...
- solr第二天 京东案例
一.案例 电商网站的搜索 在互联网项目中做搜索都应该使用全文检索. 查询的是索引库,搜索功能跟数据库没有关系.实现分析: 1.先创建索引库 需要把数据库中的数据导入到索引库中. 需要把数据库中每个字段 ...
- Django框架 之 ORM中介模型
Django框架 之 ORM中介模型 中介模型 处理类似搭配 pizza 和 topping 这样简单的多对多关系时,使用标准的ManyToManyField 就可以了.但是,有时你可能需要关联数据 ...
- 函数有一个特殊的属性 prototype!
JavaScript 中只有对象,没有类. 实际上,JavaScript 才是真正应该被称为「面向对象」的语言,因为它是少有的可以不通过类,直接创建对象的语言. 函数的 prototype 属性 在 ...
- WCF把书读薄(3)——数据契约、消息契约与错误契约
上一篇:WCF把书读薄(2)——消息交换.服务实例.会话与并发 十二.数据契约 在实际应用当中数据不可能仅仅是以int Add(int num1, int num2)这种简单的几个int的方式进行传输 ...
- Jmeter跨线程组调用token
BeanShell PostProcessor使用 1.正则提取token后添加:后置处理器-->BeanShell PostProcessor 2.BeanShell PostProcesso ...