前言
就在前几天,C语言入门到进阶部分的专栏——《维生素C语言》终于完成了。全文共计十八个章节并附带三张笔试练习篇,美中不足的是,第一章和第二章是以截图形式展现的。由于本人一开始是在有道云笔记上写的初稿,当时想方便省事(有道云排版个人感觉确实比较美观)就直接以截图的形式完成了第一章和第二章。本人考虑到因为是截图,不能复制文中出现的代码,不方便读者进行复制粘贴,所以我打算重新写一下第一章和第一章的内容,并且重新进行了排版。
本章从如何写主函数开始讲起,对C语言基础知识点进行蜻蜓点水地介绍,想看详细讲解教学请订阅专栏!专栏连接:《维生素C语言》
图标说明
❓ 表示问题
📚 表示知识点
❕ 表示注意
🔍 表示比较
🔨 表示操作/解决方案
💬 代码块
💭 思考/思考题
🚩 运行代码
✅ 正确
❌ 错误
❎ 可以但是不建议
🅰 .c文件B
🅱 .c文件B
📺 系统环境/编译器/环境
🔺 表示总结
🚫 表示禁止
📜 表示建议
📌 注意事项
🔑 表示解析、答案
💡 解决方案
💀 死循环
🐞 BUG
💊 DEBUG
🚀 提交
📦 封装
⚡ 代码优化
👆👇👈👉 方位
## 注:本图标适用于本人所有C语言系列博客!
一、如何写代码
0x00 首先写主函数
❓ 何为main函数?
main函数,又称主函数,是程序执行的起点。
1. 主函数是程序的入口
2. 主函数有且只有一个
📚 一个工程中可以有多个“.c文件”,但是多个“.c文件”中只能有一个“main 函数”
0x01 然后写代码
💬 "你好,世界!"
#include <stdio.h> //头文件 int main() { printf("hello world!\n"); return 0; }
0x02 最后运行程序
🔨 编译 + 链接 + 运行代码
快捷键: Ctrl + F5( VS2013 )
[调试] -> [选择' 开始执行(不调试)']
❓ “是不是有什么一闪而过了?”
因为程序执行得太快,所以没有看到结果。
为了看到结果,我们需要设置一下 VS2013 的属性 ( VS2019不需要设置项目属性 )
[解决方案资源管理器] -> [右键项目名称] -> [属性] -> [链接器] -> [系统] -> [子系统] -> [选择' 控制台(/SUBSYSRTEM:CONSOLE) ']
🚩 运行结果如下:
二、数据类型
0x00 基本类型
📚 这里先做些简单的介绍:
💬 基本数据类型的使用方法:
int main() { char ch = 'a'; int age = 20; float weight = 50.8; double d = 0.0; return 0; }
0x01 格式说明
📚 格式说明由“%”和格式字符组成:
💬 演示:
int main() { printf("%d\n", 100); printf("%c\n", 'a'); float foo = 5.0; printf("%f\n", foo); double pi = 3.14; printf("%.2lf\n", pi); // .xf(x为小数点保留几位数) char str1[] = "hello"; printf("%s\n", str1); int a = 10; printf("%p\n", &a); return 0; }
🚩 运行结果: 100 a 5.000000 3.14 hello 0000000000061FE04
0x02 数据类型的大小
📺 32位系统下:
📚 关键字 sizeof :获取数据在内存中所占用的存储空间,以字节为单位计数
💬 使用方法演示:
int main() { char a = 'A'; printf("%d\n", sizeof(a)) printf("%d\n", sizeof a) //求变量时可省略括号 ✅ printf("%d\n", sizeof(char)); printf("%d\n", sizeof char); //error!但是求字符类型时不可省略 ❌ return 0; }
🚩 运行结果:1
💬 使用 sizeof 求元素个数:
int main() { int arr[] = {1,2,3,4,5,6,7,8,9,10}; printf("%d\n", sizeof(arr)); //计算的是数组的总大小,单位是字节 printf("%d\n", sizeof(arr[0])); //计算的是数组首字符大小 int sz = sizeof(arr) / sizeof(arr[0]); printf("%d\n", sz); return 0; }
🚩 运行结果: 40 4 10
📚 计算机中的单位: bit - 比特位
计算机中识别二进制:1&0 8进制:0-7 10进制:0-9
三、变量与常量
0x00 创建变量
💬 代码演示:
#include <stdio.h> int main() { int age = 20; double weight = 62.5; age = age + 1; weight = weight - 10; printf("%d\n", age); printf("%lf\n", weight); return 0; }
0x01 全局变量和局部变量
💬 局部变量和全局变量的名字相同时,局部变量优先,对局部影响:
int var = 100; int main() { int var = 10; printf("%d\n", var); return 0; }
🚩 运行结果: 10
0x02 scanf 函数
💬 使用方法演示:
int main() { int a = 0; scanf("%d", &a); printf("%d", a); return 0; }
0x03 变量的使用
💬 使用方法演示:写一个代码求两个变量的和
int main() { int a = 0; int b = 0; int sum = 0; scanf("%d %d", &a, &b); sum = a + b; printf("sum = %d\n", sum); return 0; }
❗ 如果编译器发出了警告,说 scanf 不安全,在代码前面添加 #define _CRT_SECURE_NO_WANRINGS 1 即可,当然还有其他方法可以解决,这里就不细说了。 🚩 运行结果如下:(假设输入了 1 2) sum = 3
0x04 作用域和生命周期
📚 作用域(scope)
程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的 而限定这个名字的可用性的代码范围就是这个名字的作用域。
全局变量的作用域是整个工程。
局部变量的作用域是变量所在的局部范围。
📚 生命周期:
变量的生命周期:变量的创建和销毁之间的时间段
局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。
全局变量的生命周期:整个程序的生命周期。
💬 局部变量的生命周期:
int main() { { int a = 10; printf("%d\n", a); } printf("%d\n", a); //error 生命周期结束了 }
💬 全局变量的生命周期
//声明一下变量 extern int g_val; int main() { printf("%d", g_val); }
0x05 常量
📚 定义:C语言中常量和变量的定义的形式有所差异
C语言的常量分为以下几种:
① 字面常量:直接写
② const 修饰的常变量:用 const 定义
③ #define 定义的标识符常量:宏定义
④ 枚举常量:可以一一列举的常量
💬 字面常量:
int main() { 3.14; 10; 'a'; "abcdef"; }
💬 const 修饰的常量:
int main() { const int num = 10; num = 20; //error, 不能修改 printf("num = %d\n", num); }
🚩 运行结果: 10
💬 #define 定义的标识符常量:
#define MAX 10000 // 不写=,不加分号! int main() { int n = MAX; printf("%d\n", n); }
🚩 运行结果:10000
💬 枚举常量:
//性别 enum Sex { //这种枚举类型的变量的未来可能取值 //枚举常量 MALE = 3, //赋初值 FEMALE, SECRET }; int main() { enum Sex s = MALE; printf("%d\n", MALE); // MALE = 3 error 不可修改 printf("%d\n", FEMALE); printf("%d\n", SECRET); return 0; }
📌 注意事项:
const 只是一个有常属性的变量,本质上仍然为变量!arr[], 数组的大小必须是常量!
int main() { const int n = 10; //n是变量,但是又有常属性,所以我们说n是常变量 int arr[n] = {0}; // 仍然不可以,因为n是变量,只是有常属性而已 return 0; }
💬 #define 定义的可以,宏定义用得最多的地方是在数组中用于指定数组的长度:
#define N 10 int main() { int arr[N] = {0}; return 0; }
📌 注意事项:
枚举常量虽然是不能改变的,但是通过枚举常量创造出来的变量是可以改变的!
enum Color { // 枚举常量 RED, YEELOW, BULE }; int main() { enum Color c = BULE; //我们创建一个变量c,并将BULE赋给它 c = YEELOW; //这时将YEELOW赋给它,完全没有问题 ✅ BULE = 6; //error!枚举常量是不能改变的 ❌ return 0; }