C语言static与全局变量解析及易错点
需积分: 10 121 浏览量
更新于2024-07-14
收藏 923KB DOCX 举报
"此文档主要涵盖了C语言的部分关键知识点和易混淆题目,包括static关键字的使用、变量的作用域、函数调用中的参数传递等核心概念。"
在C语言中,`static`关键字扮演着重要的角色。当在一个函数内部声明一个静态变量时,这个变量将保留其在多次函数调用之间的值,即它的生命周期跨越了函数调用的边界。而在全局范围内声明静态变量,会使得该变量仅在当前源文件内可见,避免了命名冲突,同时也保持了其在程序执行期间的持久性。
C/C++不允许函数内部嵌套定义其他函数,同样,结构体内部也不能有同名的结构体成员。这是为了保证代码的清晰性和编译器的处理效率。例如,如果在一个函数内部定义另一个函数,那么内部函数的生命周期和作用域将会变得复杂,可能导致难以预料的结果。
在C语言中,参数传递通常是按值进行的,这意味着函数内部对参数的修改不会影响到函数外部的变量。然而,当传递的是指针时,情况有所不同。例如,表达式`*s-- += 7; p[1]`涉及到指针和指针所指向的值。这里的`s--`是对指针自身的操作,使指针向后移动一位;而`*s`是解引用操作,它影响的是指针所指向的值。要注意的是,`p[1]`并不等同于`*(p+1)`,前者实际上是解引用后的`s`加上7,而后者则是将指针`p`向前移动一位然后解引用。
关于字符串操作,如果子串只包含两个字符,处理起来相对简单。但要注意,`p[i]++`这样的表达式并不意味着移动指针`p`,而是将指针`p`指向的字符增加1,即`*(p+i)`。若要使指针本身前进,应使用`p++`。
全局变量的作用域从定义它的位置开始,一直到文件结束或遇到相同名字的局部变量为止。在复合语句(如大括号包围的代码块)中定义的变量,其作用域仅限于该复合语句。主函数虽然特殊,但本质上仍是一个函数,其中的变量也是局部变量,它们仅在主函数内部有效。
函数参数传递时,如果传递的是地址,那么函数可以修改该地址所指向的值,但不能改变地址本身。也就是说,地址传递改变了变量的内容,而不是变量的地址。因此,理解这些基础知识对于编写正确和高效的C语言程序至关重要。
114 浏览量
142 浏览量
2020-01-13 上传
2022-07-12 上传
181 浏览量
131 浏览量
160 浏览量
465 浏览量
2025-01-07 上传
待何
- 粉丝: 82
- 资源: 1
最新资源
- CI--EA实施
- 24L01模块原理图+PCB两种天线三块板子
- Horiseon-proyect
- SimbirSoft
- 钟摆模型:用于不同实验的 Simulink 模型-matlab开发
- shopcart.me
- 6ES7214-1AG40-0XB0_V04.04.00.zip
- hivexmlserde jar包与配套数据.rar
- KeepLayout:使自动布局更易于编码
- worldAtlas
- AdvancedPython2BA-Labo1
- lsqmultinonlin:共享参数的全局参数非线性回归-matlab开发
- STK3311-WV Preliminary Datasheet v0.9.rar
- js实现二级菜单.zip
- 微店助理 千鱼微店助理 v1.0
- tao-of-rust-codes:作者的回购