C语言历史、特点、数据类型


C语言的知识体系

一、C语言概述(历史、特点、标准)
二、数据类型(基本数据类型、输入输出)
三、基本语句及表达式、运算符(条件语句、循环语句、多路分支、goto语句、i++、++i)
四、数组(一维数组、二维数组、三维数组)
五、指针(一维指针、多维指针、数组指针、指针数组、函数指针、函数指针数组)
六、内存管理(内存泄露)
七、函数(函数声明、定义、调用、库函数使用(字符处理函数、时间函数、随机数函数))
八、编码规范(华为编码规范)
九、预处理(宏定义、宏函数、条件编译)
十、关键字(static extern register const typedef volatile inline)
十一、位操作(位运算)
十二、复合数据类型(struct union enum)
十三、文件(打开、关闭、读写、属性设置)

学习目标:

1、代码量 2、书籍阅读 3、笔记

学习要求

1、代码量:40道入门程序、力扣道题、10套编程习题、随机练习
2、书籍阅读:C陷阱与缺陷、C专家编程

一、数据类型

基本数据类型(变量定义、变量的长度、常量)
输入输出(printf)

嵌入式开发中为什么选择C语言?

1、嵌入式开发中操作系统是核心、需要移植,并在上层和底层做开发,而操作系统的核心是内核,所以内核的开发都采用C语言

为什么内核开发选择C语言?

1)能够直接访问硬件(C(硬件复杂操作) VS 汇编(硬件初始化))

在这里插入图片描述

2)运行效率(运行时语言)解释性语言VS运行时语言
3)移植性
3、C缺点:面向结构(代码的复用性差、代码的维护性差、代码的扩展性差)
4、C语言实现面向对象编程
5、C语言开发方向:操作系统(上层(库)、底层(BSP、驱动 ) 、实现(内核))、硬件中间件(sdk)

1、C语言基础知识点

1、机器码(运行效率、访问硬件的能力)
2、C语言之父:丹尼斯·里奇

C语言语法标准

k&RC、c89、c99、c11
gcc:100%c89+部分c99

2、数据类型分类

基本数据类型

内置:编译器自带类型
int、 short 、long、 long long、charng、 long long、char、float、double

复合数据类型

多个内置类型组成的新类型
数组、struct、union、enum(枚举)

void类型

void*(万能指针):C语言的多态

3、定义变量(注意事项:编码规范)

1、变量的可读性 :形容词_名词 (int sum_result;)一眼看懂其意思
2、循环变量可以用单个变量:int i;

4、基本类型需掌握的知识点

1、各种数据类型的字节长度(变量占有内存的大小:字节)

注:计算机表示内存大小的单位:8bit位=1个字节、16bit=2个字节=半字、32bit=4个字节=字、双字、1024kB=1MB、G、T

如何测量数据类型的大小?sizeof(运算符) sizeof(变量名)sizeof(数据类型)strlen统计字符中字符的个数

int main()
{
    int num=5;
    //sizeof(num);//计算数据类型和变量的内存大小
    unsigned long len = sizeof num;//无符号长整型
    printf("%ld\n",len);
}
printf("int * = %d\n",sizeof(int *));
printf("char * = %d\n",sizeof(char *));
//指针长度是固定长度
//指针类型:保存地址,操作系统中地址的长度是固定长度(8个字节),是由操作系统的位数决定的,64位系统是8个字节。32位系统是4个字节
//数组长度:数组长度*元素类型的长度
 int array_int[100];
 char src[100];
 printf("array int = %ld\n",sizeof(array_int));//400
 printf("array_char = %ld\n",sizeof(src));
 //字符长度:int strlen(char *src)
 char *ptr = "hello world";
 printf("sizeof(ptr)=%ld\n",sizeof(ptr));//测量ptr指针变量的大小
 printf("strlen(ptr) = %ld\n",strlen(ptr));
 printf("strlen(\"hello world\") = %ld\n",strlen("hello world"));

//笔试题
char *s1 = "hello world";
char s2[100] = "hello world";

printf("sizeof(s1) = %ld\n",sizeof(s1));//8
printf("sizeof(s2) = %ld\n",sizeof(s2));//100

printf("strlen(s1) = %ld\n",sizeof(s1));//11
printf("strlen(s2) = %ld\n",sizeof(s2));//11


2、各种数据类型的取值范围

unsigned char:1个字节=8bit (0-255)
signed char:(-128-127)
在这里插入图片描述

3、signed vs unsigned

解决有关signed和unsigned移植带来的问题
typedef关键字:给数据类型重命名

typedef解决的问题

1、解决有关signed和unsigned带来的移植性问题
2、提高代码可读性(比如说定义长度:typedef unsinged int Len)
3、提高编码效率

4、变量和常量

1、变量的三大特点

字节长度
生命周期&作用域
存储区域

2、作用域:可见范围

局部变量:在函数体里定义的变量——所在函数(出了函数不可见)
全局变量:在函数体外定义的变量——整个全局(需要用extern外部声明)

#include<stdio.h>
int g_num = 4;//全局变量
void fun()
{
    extern int g_count;//能访问到
    int count=6;//局部变量
}

int g_count = 4;//上面函数(fun)访问不到

int main()
{
     int num=1;//局部变量
     return 0;
}
3、生命周期

所在内存空间的分配——释放的过程
局部变量:函数体执行时,分配空间,执行结束,释放空间
全局变量:所在程序执行时,分配空间,执行结束,释放空间

4、存储区域

局部变量:存储在栈空间
全局变量:存储在数据段
在这里插入图片描述
在这里插入图片描述

include<stdio.h>
extern add(int a,int b);//函数声明
extern g_count;//引用性声明
int add(int a,int b)//函数定义
{
     return a+b;
}
int mian()
{
    add(5,6);//函数调用
    return 0;
    int num;//定义性声明
}

题目:实现一个计算器,功能加减乘除

在这里插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_49181551

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值