当前位置:网站首页>刷了一千道选择题,我总结了这些C语言易错点【第二弹】
刷了一千道选择题,我总结了这些C语言易错点【第二弹】
2022-04-22 12:14:00 【璃月偶像云堇】
写在开头:本文结论均有验证,如有错误,感谢反馈!!!
大家好,我是每天都在学习的云师傅,希望这篇文章对大家有所帮助。!
1.C语言基础知识
1.C语言内存区域划分:
|——————————————————————————————————————————|
|栈区(向下增长)(局部-入栈出栈,先进后出) |
|——————————————————————————————————————————|
|堆区(向上增长) |
|——————————————————————————————————————————|
|未初始化全局区 |
|——————————————————————————————————————————|
|已初始化全局区--全局数据区 |
|——————————————————————————————————————————|
|静态数据区域-(字符常量区) |
|——————————————————————————————————————————|
|代码区 |
|——————————————————————————————————————————|
(值得一提的是这个并不是真正的内存,这是操作系统的概念,
实际上为进程地址空间)
2..'0'字符数字不同于数字
演示:

3.转义字符一览:

3.头文件不能定义全局变量,否则如果有多个文件,那链接时会冲突。
4.偷个懒,直接放截图:

2.操作符
1.++问题
举例:++(a++) a++的结果是4,然后进行++4是不对的。
reason:++运算只是针对于变量的,不能对常量来进行++运算。
3.关键字
1.static
-静态全局变量的作用域仅限于当前源文件,静态局部变量的作用域仅限于定义的块语句里面。但是他们和全局变量一样都存储在全局区。
2函数的隐含储存类型是extern,函数的形参或变量的储存类型为auto
auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存。
只能在语句块({
})内部使用,不过我们每次定义临时变量都省略了这个关键字。
例如:auto int a=10;
补充:
extern、register、static、auto
分别是定义外部变量、寄存器变量、静态变量、自动变量
自动变量(auto)和寄存器变量(register)属于动态存储,调用时临时分配单元
而静态变量(static)和外部变量(extern)属于静态存储,在整个程时都存在
4.构造类型
(1)数组
1.数组名相当于常量,不可给它赋值,即进行数组的整体赋值,只可以在定义的时候整体初始化,更不可进行数组名++或--

2.2.字符串常量存储在常量区,其内容不可修改
演示:【程序崩溃】

3.int**不能指向二维数组,应该使用行指针int(*)[]
(2)联合体
1.联合体大小计算规定
1.大于等于最大的那一个变量的大小。
2.是最大的那种类型大小的整数倍
5.函数
1.单向值传递
简单变量(int等等,相较于指针来说)作为实参时,
将把该变量所占内存单元的值传递给形参,实参和形参各占不同的内存单元,
传递完后,实参和形参不再有任何联系,
所以这种传递方式也叫做:单向值传递方式。
2.返回值问题
return语句只能返回一个值,但这个值可以对应多个信息,比如,返回一个指针,这个指针指向一个数组,里头含有多个值
3.scanf语句输入带有空格字符串问题:
我们在使用scanf输入字符串时,如果输入的字符串有空格,则输入就停止了。这时我们会想到使用gets这个函数,但是如果今天就想用scanf这个函数能不能解决呢?当然可以!
输入语句scanf("%[^here]",x.a);(here是填结束符)
C语言中scanf()函数提供的“%[]”格式串可以用来进行多个字符的输入,
并对结束符进行自定义(^)。
对于%[]还可以用^+任意字符(例如回车:'\n')来结束字符串的输入。
演示:(\n作为结束符)

4.free函数并不会清除空间内容,只是把所释放空间还给了操作系统
5.printf函数
printf函数中,"%.5s"的意思是字符串最多输出5个字符。
再问:
那如果是"%5s"的话是什么意思?
答:
"%5s"的意思是,输出至少5个字符,如果不够五个字符,左侧用空格补齐。
6.realloc使用时参数后面的大小是新的加之前大小之和,因为他如果不能直接在原数组后面扩增,需要另找一块内存。另外:realloc时要去求被扩容的也是动态开辟
7.memset(小声bb:我的痛处- -)
.memset是对传入的内存块进行修改,例如

-10000000100000001000000010000000 一个一个字节的进行修改 对于整形,适合整体赋值0或-1;
6.预处理
1. 宏替换是在预编译时执行的,而函数是在运行时执行的。宏替换在编译前进行,不分配内存 . 宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
2.宏和const的区别
(1)#define定义的宏是在预处理阶段进行替换的,const常量是在编译、运行阶段进行使用的。注意是宏替换仅仅的字符串替换,并不会检查其合法性。 预处理阶段做了的任务: 【重点】
1:将头文件中的内容(源文件之外的文件)插入到源文件中
2:进行了宏替换的过程(简单的字符串替换),定义和替换了由#define指令定义的符号
3:删除掉注释的过程,注释是不会带入到编译阶段
4:条件编译
(2)所有的宏替换只是简单的字符串替换,注意是字符串替换,所以并不会检查其合法性,而const定义的常量依然是内置类型等,所以会对其进行类型安全检查。
(3)宏定义在程序中使用了几次在预处理阶段就会被展开几次,并不会增加内存占用,但是宏定义每展开一次,代码的长度就要发生变化(有利有弊),而const常量也会为其分配内存(如果是动态申请空间肯定就是堆中了)。
(4)const定义的常量只有一次拷贝,而define定义的变量在内存中并没有拷贝,因为所有的预处理指令都在预处理时进行了替换。
版权声明
本文为[璃月偶像云堇]所创,转载请带上原文链接,感谢
https://blog.csdn.net/naititi/article/details/124274262
边栏推荐
- JS 【詳解】作用域
- A note that allows you to capture the offer of a large factory. Come and get it quickly
- 封装的方法2
- Is it better to use V-IF on the component or use V-IF to control the highest level div in the component? What are the advantages and disadvantages
- 分布式监控CAT服务端的本地部署
- 在VSCode中设置滑动滚轮改变字体大小
- 【深入理解TcaplusDB技术】删除列表所有数据接口说明——[List表]
- Distributed transaction and lock
- congratulations! You have been concerned about the official account for 1 years, and invite you to join NetEase data analysis training.
- 开发者友好型公链Neo | 如何连接 Web2 开发者到 Web3 世界
猜你喜欢
![【深入理解TcaplusDB技术】更替列表指定位置数据接口说明——[List表]](/img/ed/cccd5dee09d2f0a3e6c788bd265b36.png)
【深入理解TcaplusDB技术】更替列表指定位置数据接口说明——[List表]

软件智能:aaas系统的 AI服务功能:大纲图的无意识代理功能和八卦图的关系

Father of MySQL: the code should be written at once, not later

MySQL之父:代码应该一次写成,而不是后面再改

"Open source summer" activity is hot. In the registration, rich bonuses are waiting for you to get!

Smart business card applet creates business card page function and realizes key code
![【深入理解TcaplusDB技术】批量删除列表指定位置数据接口说明——[List表]](/img/ed/cccd5dee09d2f0a3e6c788bd265b36.png)
【深入理解TcaplusDB技术】批量删除列表指定位置数据接口说明——[List表]

在VSCode中设置滑动滚轮改变字体大小

When the new version of redis is released, do you still think redis is a single thread?

Game + NFT, another feasible scene from virtual to real
随机推荐
"Open source summer" activity is hot. In the registration, rich bonuses are waiting for you to get!
Experience and guidance of senior students preparing for the postgraduate entrance examination of English translation of Southeast University in 2023
自动化测试的生命周期是什么?
在VSCode中设置滑动滚轮改变字体大小
Is it better to use V-IF on the component or use V-IF to control the highest level div in the component? What are the advantages and disadvantages
電工第二講
软件智能:aaas系统的 AI服务功能:大纲图的无意识代理功能和八卦图的关系
订货系统打破批发企业瓶颈期,助力企业数字化转型
Cvpr2022 𞓜 3D reconstruction of mobile end hand
nt10. 0 system (server2016 / 2019) runtimebroker abnormally shut down, associated event ID 142 / 143 / 226 / 227 / 228, etc
Game + NFT, another feasible scene from virtual to real
购买不同品牌的手机,怎么对比硬件配置?
.NET宝藏API之:OutputFormatter,格式化输出对象
组件上用v-if好还是组件内最上级的div用v-if来控制好,优缺点是什么
NFT、GameFi、SocialFi、云存储,DFINITY 生态上最热赛道详解
Distributed transaction and lock
1086 tree traversals again (25 points)
【深入理解TcaplusDB技术】示例代码——异步调用接口
Leetcode Tencent selected exercises 50 questions - 104 Maximum depth of binary tree
【深入理解TcaplusDB技术】更替列表指定位置数据接口说明——[List表]