- 编辑:.c 源文件
- 编译:.obj 目标文件
- 链接:.obj + 库文件 生成可执行文件:exe
- 运行:点击 .exe 文件即可执行
-
C 程序的主题结构说明
#include... int main() { 语句; return 0; } -
C 程序源文件以 c 为扩展名
-
C 程序的执行入口是 main 函数
-
严格区分大小写
-
C 语言有一条条语句构成,每个语句都以 ; 结束
-
大括号都是成对出现
// 注释多行注释
使用细节
- 注释的地方不被执行
- 不能嵌套注释
- 注释函数用块注释
- 注释语句用单注释
-
tab右移,shift + tab左移
-
运算符左右需加一个空格
-
代码格式化快捷键ctrl+alt+L
-
块风格
int max(int a, intb){ if(a>b){ return a; }else{ return b; } } -
次行风格
int max(itn a, int b) { if(a>b) { return a; } else { return b; } }
- 声明变量:int num
- 赋值:num = 5506
- 使用:365 * num
也可以一步到位:int num = 5506
变量使用注意事项- 变量表示内存中的一个存储区域,不同的数据类型,占用的空间大小不一样
- 在该区域有自己的名称和类型
- 变量必须向声明,后使用
- 该区域的数据可以在同一类型范围内不断变化
- 变量在同一个作用域内不能重名
- 变量三要素:变量名 + 值 + 数据类型
-
每一种数据都定义了明确的数据类型,在内存中分配了大小不同的内存空间(使用字节来表示)
-
数据类型
-
数据类型总结
- 在C语言中,没有字符串类型,而是使用字符数组表示字符串
- 在不同的系统上,部分数据类型字节长度是不一样的
-
各种类型的存储大小与操作系统、系统位数和编译器有关
-
C语言的整型类型,分为符号 signed 和无符号 unsigned 两种,默认是 signed
-
C语言中整型常声明为 int 型,除非不足以表示大数,才使用 long long
-
bit(位):计算机中的最小存储单位,byte(字节):计算机中的基本存储单位
1 byte = 8 bit
说明:
- 浮点数在机器中的存放形式,浮点数=符号位+尾数位,浮点数是近似值
- 浮点数的位数部分可能丢失,造成精度损失
- 浮点型常量默认是 double 型,声明 float 型常量时,须加 f 或者 F
- 浮点数常量的表示形式:
- 十进制
- 科学计数法
- 通常情况下,应该使用 double 型,因为它比 float 型更精确
字符类型可以表示单个字符,字符类型是 char,char 是 1 个字节(可以存放字母或者数字)。多个字符常委字符串,在C语言中,使用 char 数组表示,数组不是基本数据类型,而是构造类型。
字符类型使用细节- 字符常量使用单引号 ' ' 括起来的单个字符
- C语言允许使用转义字符 来将其后的字符转变为特殊的字符常量
- 在C语言中,char 的本质是要给整数,在输出时,是 ASCII 码对应的字符
- 可以直接给 char 赋一个整数,然后输出,会按照对应的 ASCII 字符输出对应的字符
- char 类型是可以进行运算的,相当于一个整数
- 字符型存储到计算中时,需要将字符对应的 ASCII 值找出来
- 存储:字符 a ——>码值(97)——> 二进制(1100001) ——> 存储
- 读取:二进制(1100001) ——> 码值(97)——> 字符 a ——> 读取
- 字符和码值的对应关系时通过字符编码表来决定的
- 字节小的转换成字节大的
- 精度小的转换成精度大的
- 有符号的转换成无符号
- 赋值号 = 两边,右边转换成左边,右边的可能损失一部分数据
可将精度高的转成精度小的,但可能会造成精度降低或者溢出
格式:(类型名)表达式 int(3.5)强制类型转换细节说明
- 精度高 ——> 精度低,需要使用强制转换
- 强制符号只针对最近的操作数有效,往往使用小括号提升优先级
指针就是一种动态的变量,其目的就是为了方便更改变量。指针表示的是一个地址,什么地址呢?就是变量的地址。
通过上图可知变量 a=5506的地址为 xxx,而指针 ptr=&a 表示 ptr 存储了变量 a 的地址。若要通过指针访问变量的值,应这样写:&ptr。
通过上述的我们可以发现所谓的指针其实也是一个变量,只不过这个变量存储的是其他变量的地址。那么如此的话,多了个变量且不是多余的?
例子
#include指针细节说明int main(){ int a = 5506; int *ptr = &a; printf("a的值:%dn", a); printf("通过指针访问a的值:%dn", *ptr); printf("通过指针访问a的地址(或者说是指针本身存放的值):%dn", ptr); printf("通过取值符取出a的地址:%dn", &a); return 0; }
- 基本类型,都有对应的指针类型
- 有指向数组的指针、指向结构体的指针、指向共用体的指针
- 默认传递值的类型:
- 基本数据类型
- 整型
- 浮点
- 字符
- 结构体
- 通用体
- 基本数据类型
- 默认传递地址的类型
- 指针
- 数组
- 值传递和地址传递使用的特点
- 值传递:值传递只是简单的拷贝,并不会改变原来的值
- 地址传递:地址传递会改变原来的
地址传递和值传递的实例:
- 值传递:值传递只是简单的拷贝,并不会改变原来的值
#includeint main() { int a = 1, b; // 值传递,不改变原来值的大小,即a的大小 printf("---值传递---"); b = a; printf("a = %d, b = %dn",a , b); b = 2; printf("a = %d, b = %dn",a , b); b = 3; printf("a = %d, b = %dn",a , b); // 地址传递,改变原值 printf("---地址传递---n"); int *p1 = &a; int *p2 = p1; printf("未更改前:a = %d n", a); *p2 = 12; printf("改变 *p2 的值后:a = %dn", a); return 0; } 结果: ---值传递---a = 1, b = 1 a = 1, b = 2 a = 1, b = 3 ---地址传递--- 未更改前:a = 1 改变 *p2 的值后:a = 12
本人小白一枚,有什么地方有错还望您能帮我指出,再次感激不尽。
本文参考尚硅谷的C语言课程,在哔哩哔哩上可以看,网址如下:https://www.bilibili.com/video/BV1qJ411z7Hf?spm_id_from=333.999.0.0与君共勉



