gcc -o hello hello.c
-o: 输出可执行文件
-c:只要求编译器输出目标代码(.o文件),而不输出可执行文件
-g:用于调试
./hello 查看输出结果
一个程序包含两部分:
- 对数据的描述:程序中要指定数据类型和数据的组织形式
- 对操作的描述(算法)
Scanf(”%d”, &age);
If else中else总是跟最近的if进行匹配
运算符 . 是成员选择(对象)
->是成员选择(指针):对象的指针指向成员名
+=: 加后赋值
-=: 减后复制
Strcpy:拷贝
库函数头文件:#include<stdio.h>
三目运算符:(x>y)?(x):(y)
Return: 结束整个函数
一般约定return 0 和return 1
Return 0 和return -1 这样配套使用
Return关键字的作用是返回流程的控制权,只要使用了return,不管有无返回值,都表示该函数调用结束
Return 0 :代表正常终止
Return 1 代表函数非正常终止
Return -1 代表函数非正常终止
被调函数return 1或者return-1 只是给主调函数一个标志,说明执行过程中遇到异常情况
%d:整形输出
%o:八进制形式输出
%x:以16进制输出整数
%u:输出无符号型数据
%c:输出一个字符
%s:输出一个字符串
%f:输出浮点数
#ifndef “如果未定义” 检用来检查特定·符号(宏)在文件或项目中是否尚未被定义
#define 宏定义。用于在尚未定义的情况下定义该符号。将该符号设置为特定之,或仅将其定义为某种意义上的“真”
#endif : 标记了应仅包含一次的代码块的结束
字符串末尾有个\0 占位符
使用静态对象代替非静态对象的优势:
在递归函数中,通常会使用非静态局部对象(栈对象)来存储递归调用中的临时变量和中间状态。每次递归都会创建和销毁这些非静态局部变量,导致额外的时间和空间开销
静态对象在程序的生命周期内保持不变,不会在每次函数调用时重新创建和销毁。并且静态对象还可以保存递归调用的中间状态。
指针类型的意义:
指针类型决定了指针向前或者向后走一步有多大(距离)
指针类型决定了对指针解引用的时候有多大的权限(能操作几个字节)
野指针:就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
比如:指针未初始化、指针越界
规避野指针:
指针初始化
小心指针越界
指针指向的空间释放(即使已经置NULL)
避免返回局部变量的地址
指针使用之前检查有效性
指针变量进行相减是指针所代表的地址进行相减,将得出的值除以指针所指向的空间所占据的字节数
数组名表示的是数组首元素地址
指针数组,数组每个元素都是指针