擘塞 发表于 2025-12-22 01:55:00

《C语言程序设计》琐碎知识点总结笔记

《C语言程序设计》琐碎知识点总结笔记

本篇笔记旨在拾掇干净一些琐碎的小/冷知识点,免得给之后的学习留不必要的念想。
一、变量的存储类别

变量的定义形式:
[存储类别] 类型标识符 变量名
现对“存储类别”加以说明。
存储空间分为程序区和数据区,数据区分为静态存储区和动态存储区。
存储类别有:自动型(auto)、寄存器型(register)、静态型(static)、外部型(extern)。
1.局部变量的存储类别

局部变量的存储类别有:自动型、静态型、寄存器型。
(1)自动型局部变量

在动态存储区分配存储空间,调用函数时分配存储空间,调用结束后自动释放存储空间。
默认的存储类别,相当于最常使用的、定义时不加“存储类别”的变量。
auto float m;
auto int a,b,c=10;
(2)静态型局部变量

在静态存储区分配存储空间,调用函数时分配存储空间,调用结束后不会释放存储空间,并保留变量的值。
人话:只记住初始化的值,之后的一切变量值的改变都无视。
static int c=3;
上述代码中变量c的值便永远是3了(在其作用域内)。
(3)寄存器型局部变量

将局部变量的值放在CPU通用寄存器中。
只有自动型局部变量和形式参数可以说明为寄存器型变量。(说明寄存器型满足自动型的特性,如可改变值)
register int a,b;
ps:曾见过有人将循环语句中的 \(i\) 声明为寄存器型来进行常数优化,但我的C语言老师又说寄存器型已经“名存实亡”,由此可见还是不要随便用寄存器型为好。
2.全局变量的存储类别

通过引用声明可以扩展全局变量的作用域(类似于函数的引用说明),引用声明的形式为:
extern 数据类型 变量名
全局变量的存储类别有:静态型、外部型。
(1)静态型全局变量

静态型全局变量只能被它所在文件中的函数使用,不能被其他文件中的函数使用。
可以通过引用声明在本文件内扩展其作用域。
举例如下:
extern int a,b;// a,b的引用说明语句
int fun()
{
        if(a>b) return a;
        else return b;
}
static int a,b;// a,b的定义语句上述代码也可直接写成:
static int a,b;
int fun()
{
        if(a>b) return a;
        else return b;
}(2)外部型全局变量

若没有给出存储类别(即前面什么也不加),则定义的变量为外部型全局变量。
通过引用声明,可以将全局变量作用域扩展到定义它之前的函数,也可以扩展到程序中的其他文件。
举例如下:
(源文件1)
int a,b;// 定义外部型全局变量a,b(源文件2)
extern int a,b;// 外部型全局变量引用说明二、函数的存储类别

函数的定义形式:
[函数存储类别][函数返回值类型]函数名([函数形式参数表])
{
        函数体说明部分
        函数功能语句序列
       
}现对“函数存储类别”加以说明。
根据函数能否被其他源文件的函数调用,函数可以分为内部函数(static)和外部函数(extern)。
1.内部函数

存储类别为static,又称静态函数。
只能被它所在文件中的函数调用。
不同文件中的内部函数可以同名,互不干扰。
static int fun(int a,int b)
{
        return (a>b?a:b);
}2.外部函数

存储类别为extern或省略存储类别。
既能被它所在文件中的函数调用,也能被其他文件中的函数调用。
如果一个文件要调用另一个文件中定义的外部函数,则在调用函数的文件中一定要对被调用的外部函数进行引用声明。
引用声明的形式:
extern 函数名([函数形式参数表])
举例如下:
(源文件1)
#include<stdio.h>
int main()
{
    extern fun(int a,int b);
        int a,b;
    scanf("%d%d",&a,&b);
        printf("%d\n",fun(a,b));
        return 0;
}(源文件2)
#include<stdio.h>
int fun(int a,int b)
{
        return (a>b?a:b);
}三、编译预处理

在编译之前进行的处理,以“#”开头。
1.宏定义

宏定义的本质是在程序编译前进行替换。
注意替换后的运算优先级,在必要时使用括号。
(1)不带参数的宏定义

定义与取消定义:
#define 宏名 宏体
#undef 宏名举例如下:
#define PI 3.1415926
(2)带参数的宏定义

定义与取消定义:
#define 宏名(形参列表) 宏体
#undef 宏名使用:
宏名(实参列表)
举例如下:
#define s(a,b) a>b?a:b
s(3,4)
宏替换为:3>4?3:4
2.文件包含

#include "文件名"
#include
3.条件编译

形式1:

#ifdef 标识符
        程序段1
[#else
        程序段2]
#endif若标识符已经被定义(使用#define 标识符),则对程序段1进行编译,否则对程序段2进行编译。
形式2:

#ifndef 标识符
        程序段1
[#else
        程序段2]
#endif若标识符未被定义,则对程序段1进行编译,否则对程序段2进行编译。
形式3:

#if 常量表达式
        程序段1
[#else
        程序段2]
#endif若表达式的值为真,则对程序段1进行编译,否则对程序段2进行编译。
四、主函数与命令行参数

主函数的格式为:
void main(])
{
        ...
}()中的信息称为命令行参数。
argc用于保存用户命令行中输入的命令中参数的个数,命令名本身也是一个参数。
argv[]是一个字符指针数组,用于保存各个参数的首地址(包括命令名本身)。
五、变量的作用域

ps:只提几个关键点。
1.{}括起来的是一个复合语句,其中定义的局部变量只能在该复合语句中使用。
2.主函数中定义的变量也是局部变量,只在主函数中有效。
3.不同函数中定义的局部变量可以同名,它们互不干扰。
4.形式参数也是局部变量,只在它所在的函数中有效。
5.全局变量的作用域从定义点开始直到文件尾,可以被作用域内的所有函数共用。
6.在同一个源文件内,如果全局变量和局部变量同名,则在局部变量的作用域内全局变量不起作用。(强权难压地头蛇)
六、运算符与表达式

1.算术运算符和算术表达式

(1)算术运算符

双目:+加法        -减法        *乘法        /除法        %取模
单目:+取正        -取负        ++自加        --自减
取负不改变变量的值。
自加自减运算符只能用于变量,不能用于常量和表达式。
(2)算术表达式

单个的常量和变量都是算术表达式。
算术表达式的值是数值型。
(3)优先级

高:-(取负)、++、--
中:*、/、%
低:+、-
(4)结合方向

右结合:-(取负)、++、--
左结合:+、-、*、/、%
当++、--、+、-混合运算时,应自左向右尽可能多地组合运算符。
(5)类型转换

自动类型转换:从低精度类型转换成高精度类型。
精度从高到低:double->long->unsigned->int->char
强制类型转换
(类型标识符) (表达式)
2.关系运算符和关系表达式

(1)关系运算符


双目:>        >=        <        、>=、

钿稳铆 发表于 2026-1-1 20:22:07

喜欢鼓捣这些软件,现在用得少,谢谢分享!

任静柔 发表于 2026-1-3 04:35:00

不错,里面软件多更新就更好了

郦珠雨 发表于 2026-1-15 01:26:43

不错,里面软件多更新就更好了

骆贵 发表于 2026-1-16 19:08:08

感谢,下载保存了

龙梨丝 发表于 2026-1-17 20:20:47

过来提前占个楼

喜及眩 发表于 2026-1-20 18:38:39

过来提前占个楼

俏挺喳 发表于 2026-1-20 22:42:16

懂技术并乐意极积无私分享的人越来越少。珍惜

邰怀卉 发表于 2026-1-20 23:17:41

分享、互助 让互联网精神温暖你我

瞧厨 发表于 2026-1-21 13:28:53

东西不错很实用谢谢分享

艾晓梅 发表于 2026-1-21 18:19:02

鼓励转贴优秀软件安全工具和文档!

况雪柳 发表于 2026-1-23 01:46:54

yyds。多谢分享

昝琳怡 发表于 2026-1-23 04:15:51

感谢分享,下载保存了,貌似很强大

移国拱 发表于 2026-1-26 12:40:28

热心回复!

痨砖 发表于 2026-2-2 15:41:51

这个有用。

蝌棚煌 发表于 2026-2-4 08:56:59

这个有用。

予捻 发表于 2026-2-5 05:16:15

感谢发布原创作品,程序园因你更精彩

滥眩 发表于 2026-2-7 07:51:58

新版吗?好像是停更了吧。

赴忽 发表于 2026-2-8 00:14:49

很好很强大我过来先占个楼 待编辑

喙审 发表于 2026-2-8 05:01:14

过来提前占个楼
页: [1] 2
查看完整版本: 《C语言程序设计》琐碎知识点总结笔记