C语言基础知识总结

C语言基础知识总结

优质博文推荐
C的基本程序框架

#include <stdio.h> //这里预处理,在下面的程序中用到了头文件中声明的函数printf,参考下面声明的
//display(这里可以只写数据类型,也可以和设置这个函数中的形参一样int x,推荐后者)//头文件的使用和
//宏替换#define 类似,只不过它是把头文件的内容替换到#include 的位置。
//头文件,分文件编程,模块化程序很高效,头文件一般用来放声明的东西,如函数,常量,宏等

void display(int);//这个函数的功能块写在了main函数的后面所以要在调用之前声明,告诉编译器函数的基本特征,否则报错。

int main() //main-C程序唯一的主函数 前有返回值的声明 后有参数的入口 
{
	//函数体--逻辑功能块
	display(3);//调用自定义函数,传了一个实际参数
	
	return 0;//函数根据条件执行到一定程度返回的结果,可以是值,也可以是地址(指针)
}
//还有这种不需要返回函数执行结果的结构
void display(int x)
{
	printf("%d\n",x);
	return ;//当然也可以不用写;程序执行到这句直接结束。也就是说return在某些时候可以当exit用。
}

C程序的产生过程:
编辑(源程序代码)-》 编译生成OBJ对象文件-》 链接库-》生成可执行程序

核心内存,它通过标识符(自定义的变量名,数组名,结构体名等)直接对数据进行操作/访问
也可以间接通过指针/地址对数据进行操作/访问,后者更高效。我有些觉得它本质上都是基于地址访问数据的。

数据的两种形式(变量 常量) 数据具有生存期和作用域 分局部变量和全局变量

数据类型:
基本:char (本质也是整型) int short long float double signed unsigned //数据类型字节大小由系统分配,不同系统可能会有差别,用sizeof看它们的字节大小。

构造:array数组 struct结构体 union共同体 enum枚举 *指针

例外:void无类型

程序结构:
1.顺序结构:程序逐条执行
2.分支结构:if if else if else if else if … else (开关语句)switch case default
3.循环结构:while(1)== for(;;) do while (do while)在判断条件前先执行一次循环体
4.我觉得还有嵌套结构 和 跳转结构goto goto慎用,但在跳出多次嵌套的深循环中特别有用。
补:break用于退出当前层次的循环,continue用于跳过当次循环,直接执行下一次循环。

我们使用的变量都是由编译器存储在内存中的,存储方式:
static静态变量:在一个小范围内突破自己的生存周期
auto 自动变量:一般在没有使用其他存储类型时,编译器默认这种方式,如 int a ,实际是 auto int a
const 常量:用于定义常量 也可以使用宏定义#define 定义常量。
extern外部变量:用的少,会不会是把局部变量变得像全局变量,使它可以被其他函数操作。
register:寄存器变量 好像是C51里的,用的比较少。

typedef :用于在上述数据类型的基础上定义自己的数据类型;
volatile:变量在程序执行中可被隐含地改变;

转义序列:
\n 换行
\r 回车
\b 退格
\f 换页
\t 水平制表符
\v 垂直制表符
? ?
\a 鸣笛 (程序里用过,没效果。额。。。)
\ "
\ ’
\ \
占位符:(用于格式化输入输出中)
%d 十进制
%f 单精度实型
%lf 双精度实型
%c ascii 字符
%s 字符串
%ld 长整型
%o 八进制
%e 指数形式
%x 十六进制
%u 无符号整型
运算符:
1.算数:+ - * / % ++ --(后两个是自增1和自减1,在循环中用的比较多)++i i++的区别,前者先加1在使用变量,后者使用变量后再加1,加1后的值在下一次循环中使用

2.位运算:&位于 |位或 ~按位取反 <<左移 >>右移 ^按位异或 在单片机的寄存器操作上常用

3.逻辑运算:逻辑于&& 逻辑或|| 逻辑非!

4.关系运算符:== 等于(注意与赋值符区别 =)!=不等于 <小于 >大于 <=小于等于 >=大于等于

5.特殊运算符:* 取出地址中的内容 &取地址 sizeof计算数据类型的大小

程序调试

1.在调试程序时printf对于调试可以有显示信息的程序相当有用。
2.LINUX下的gdb调试工具对于段错误的查找很有效。

编程学习中遇到的问题

1.标准输入scanf的使用中,在键盘输入有一个回车容易被忽略
2.养成使用malloc函数开辟的内存一定要在程序结束前做好free的处理
3.培养编程终极大招,善于面向百度编程
4.使用指针的时候要注意,它的作用对象是常量还是变量,字符数组和字符串指针的区别
5.LINUX的vim编辑器中,将光标移到头文件名,敲gf可以查看头文件内容
6.函数是构成C语言的功能模块,尽量将控制流程封装为函数块,这样不仅提高了效率(复用)和程序可读性,还使得代码容易被维护。
7.将其他功能函数中创建的变量的地址返回给主函数进行使用时,根据需求,那个返回的变量是否设为静态变量,这涉及到变量的生存期问题。
8.内存泄漏和内存溢出的问题。
9.在编程设计时画画内存图对程序理解有不错的帮助。
10.函数传参有赋值传参和引用传参,前者针对变量的本质是拷贝了一份值,后者针对地址(指针)也是拷贝一份地址,但本质是基于同一块内存的操作。
11.*号只有在定义变量和常量的时候代表指针,在对定义的指针进行使用是用到 *号代表取出地址的内容。
12.数组在定义的时候,方括号里是数组元素的个数,在对数组数据进行访问时方括号里的数字代表元素标号
13.强制转换类型的对象可以是指针也可以是变量
14.指针的类型不同,偏移值也会不同。对数组元素的访问不要越界。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值