使用 Visual Studio 2019 【在更】基础 | C 语言笔记

一、简介 学习资源
王道训练营-C语言教程
历史
语言:C 语言 ← B 语言 ← A 语言
开发环境:编辑器 + 编译器 + 调试器
系统:Linux ← UNIX
不同语言之间的区别
C/C++:可移植性强的语言 ,  和 Linux 的接口有差异 , 汇编语言 。
Java/:跨平台语言 , 可从平台移植到 Linux 平台使用
学习目标 理解程序的执行过程掌握程序调试能力 断点及调试窗口设置 内存的变化过程
在编译器行号左侧灰色部分点击出现红点(断点) 。
当程序运行到断点时(上图出现黄色箭头) , 执行步骤截止至断点之前 。此时 i 的地址内容未发生改变 。
点击逐过程 , 程序运行下一步后 , i 地址的内存发生改变 , 变为 i 的取值 10(十六进制表示为 0a 。小端显示:低地址在前 , 高地址在后 , 实际存储内容为 00 00 00 0a) 。
点击逐过程 , 程序执行输出 hello world
输出:
点击逐过程 , 程序运行 2019 版隐藏的 ("pause") , 打印【按任意键关闭此窗口】 。此时程序执行 C 语言内镶嵌语言的命令 pause 。
C 语言也可嵌套其他语言 , 如微软的语言 BAT(微软处理脚本)、 等 。
Debug 模式与模式的区别
因此只有在 Debug 模式下才能对代码进行调试 。
逐过程(F10)与逐语句(F11)的区别声明子函数
格式:void 函数名(传递的参数) {函数内容};
注意:当传递数组时 , 参数部分表示为 数组名[] 即可 。因为传递数组时 , 子函数并不知道数组长度 , 所以数组长度需要另外定义与传递 , 即 void 函数名(数组名[],数组长度的变量名) {函数内容}; 。
C/C++/Java 出错
编译错误:代码编写错误 , 无法编译生成
执行错误:打印结果不符合预期
编译原理解析 程序的编译过程
关于编译器解决方案与项目编译与链接的区别:
报错时出现 error为链接错误 。双击报错可定位 , 可能是链接源的错误或链接位置的错误 。
二、数据类型、运算符与表达式 学习目标2.1 数据类型的分类
2.2 常量
程序运行过程中值不发生改变的量 。
例:int i = 10 10 为常量 / 立即数
内存:
PC 指针:程序计数器 , 存储一个地址值 , 指向当前马上要给 CPU 译码器的指令 。每执行一条则向下走一条指令(每条指令不一定等长) 。
译码器读取 i = 10 , 在栈空间开辟 4 字节内存 , 将 10 复制到栈空间 。
变量:在栈空间上有一个存储的位置 , 可改变 。
常量:在编译后即被放入译码器的代码段 , 不可改变 。
64位文件可用的虚拟地址空间大小: 2 32 × 4 G 2^{32}×4\ G 232×4G
2.3 变量2.4 整型数据 2.4.1 符号常量
定义:# 变量名 常量(末尾不加分号) 。
程序中用到的常量名位置直接替换为常量内容 。
例:输出为 7
3+2*2=7
其中 , 查看预处理效果方法:右击项目 → 属性 → 配置属性 → C/C++ / 预处理文件 → 是 。重新生成后在项目 → Debug 文件夹 → 打开 main.i 文件 , 前几万行为头文件(.c 文件中开头带 # 行)的展开 , 文件末尾为预处理结果即需要查看的部分 → 查看后将“是”改回为“否” , 否则之后运行报错 。
作用:提高程序可读性、便于修改 。
2.4.2 整型常量的不同进制表示 2 / 4 / 8 / 16
进制转换: