嵌入式学习(一)嵌入式c语言

第一章.c数据类型及语句

1.01 第一个c程序的编写

        下载好VScode并配置好环境,可以开始进行第一个c程序的编写。

#include 

int main(int argc,char *argv[])
{
    printf("Hello World!\n");
    return 0 ;
}

        需要注意的几点:

                1.#include头文件包含一定要有 

                2.每一个c语言程序有且只有一个main函数这是整个程序的开始位置

                3.c语言中的括号和冒号都是成对出现的且都是英文符号

                4.c语言中的语句必须要以分号结尾

                5.//为注释

        此为运行按钮,点击即可运行程序。

        可以看到程序已经成功在终端运行,成功迈出了第一步。

1.02 数据类型相关的关键字

        关键字是c语言已经定义好的名字,直接可以拿过来使用,不需要再次定义。数据类型相关的关键字用于定义变量或者类型。

定义变量的语法结构:  类型  变量名;

        变量名属于标识符(变量名,函数名,重命名和取别名),命名规则:

        (1)只能以数字,下划线和字母命名

        (2)首字母不能是数字

        (3)不能与关键字相同

包含char,short,int,long,double,float,struct,union,enum,signed,unsigned,void等关键字

1,char 字符型 用char定义的变量属于字符型变量 占一个字节(8位)

        有符号:-2^7~+2^7-1

        无符号:0~2^8-1

        char ch1 = 'a'; ; =为赋值号

        char ch1 = ’1‘; 正确

        char ch2 = ’1234‘; 错误 ’1234‘为字符串

2,short 短整型 使用short定义的变量是短整型变量 占两个字节(16位)

        有符号:-2^15~+2^15-1

        无符号:0~2^16-1

        short int a = 11;

3,int 整型 用int定义的变量是整型变量 占四个字节

        有符号:-2^31~+2^31-1

        无符号:0~2^32-1

        int a=44;

4,long 长整型 用long定义的变量是长整型 在32位的系统下占四个字节 在64位的系统下占八个字节

        有符号:-2^31~+2^31-1

        无符号:0~2^32-1

        long int a=66;

5,float 单浮点型(实数)用float定义的变量是单浮点型的实数 占四个字节

        有符号:-2^31~+2^31-1

        无符号:0~2^32-1

        float b =3.8f;

6,double 双浮点型(实数) 用double定义的变量是双浮点型实数 占八个字节

        double b = 0.8;

7,struct 结构体类型关键字

8,union 共用体(联合体)相关关键字

9,enum 与枚举类型相关的关键字

10,signed 有符号(正负)的意思  在定义char 整型(short,int,long)数据的时候用signed修饰,代表定义的数据是有符号的,可以保存正数,也可以保存负数

        signed int a = 100;

        signed int b = -100;

注意:默认情况下signed可以省略 默认有符号类型数据

11,unsigned 无符号的意思 只能保存正数和0  在定义char 整型(short,int,long)数据的时候用unsigned修饰,代表定义的数据是无符号的

12,void 空类型的关键字

        char,int,float都可以定义变量

        void不能定义变量,没有void类型的变量

        void用来修饰函数的参数或者返回值,代表函数没有参数或者没有返回值

sizeof():是一个运算符,可以用来获取数据类型所占内存的大小

1.03存储相关关键字

register static const auto extern

1.register是寄存器的意思  用register修饰的变量是寄存器变量

        即:在编译的时候告诉编译器这个是寄存器变量,要尽量将其存储在寄存器当中。

        注意:

        (1)定义的变量不一定真的存放在寄存器当中

        (2)cpu取数据的时候从寄存器中取数据比内存中快

        (3)因为寄存器比较宝贵,所以不能定义寄存器数组

        (4)register只能修饰字符型和整型不能修饰浮点型的

        (5)因为register修饰的变量可能存放在寄存器中也可能存放在内存中,所以不能对寄存器取变量地址,只有在内存中存放的数据才有地址

2,static 是静态的意思 

        static可以修饰全局变量 局部变量 函数

        使用static修饰的变量,此变量存放在内存的静态区空间中

3,const 是常量的意思 用const修饰的变量是只读的不可以修改它的值

        const int a = 101;//在定义的时候用const修饰,并赋初值为101,从此以后就不能给a赋值了,const也可以修饰指针

4,auto

        auto int a; 和 int a;是等价的,现在基本不用auto

5,extern 是外部的意思,一般用于函数和全局变量的声明

1.04控制语句相关的关键字

条件控制语句:

        if语句:if else

        switch语句:switch  case default

循环控制语句:

        do while for  goto

辅助控制语句:

        break continue

1.05其他关键字

sizeof  typedef  volatile

1,sizeof 用来测量变量 数组的储存空间大小(字节数)

        例:int a;

               int num;

                num = sizeof(a);

                print(“num = %d”,num);

2,typedef  重命名相关的关键字 作用是给一个已有的类型,重新起一个类型名,并没有创造一个新的类型。

        1.用想起名的类型定义一个变量

        short int a;

        2.用新的类型名代替变量名

       short int INT16;

        3.在最前面加上typedef

        typedef short int INT16;

        4.然后就可以用新的类型名定义变量了

        INT16 b;和short int b;是一个效果

3,volatile 易改变的意思 

用volatile定义的变量是易改变的,即告诉cpu每次用volatile变量的时候重新去内存中取 保证用的是最新的值而不是寄存器中的备份 现在极少使用

1.06 基本类型

char,int,short,long,float,double

#include 


int main(int argc,char *argv[])
{   //定义一个char类型的变量并赋值   输出用%c
    char a = 'w';
    printf("a = %c\n",a);
    //定义一个short类型的变量并赋值
    short b = 100;
    printf("b = %d\n",b);
    //定义一个int类型的变量并赋值  输出用%d
    int c = 100;
    printf("c = %d\n",c);
    //定义一个long类型的变量并赋值 输出用%ld
    long d = 151514;
    printf("d = %ld\n",d);
    //定义一个float类型的变量并赋值 输出用%f
    float e = 3.048454465;
    printf("e = %f\n",e);
    //定义一个double类型的变量并赋值 输出用%lf
    double f = 4561.481564156;
    printf("f = %lf\n",f);
    return 0 ;
}

嵌入式学习(一)嵌入式c语言_第1张图片

代码运行结果正常,需要注意的是float和double类型的变量最多到小数点后六位。

1.07构造类型

概念:由多个相同或不同类型的数据构成的集合,这种数据类型被称为构造类型。

数组,结构体,共用体,枚举

1.08变量和常量的基本认识

常量:在程序运行过程中,值不可以改变的量

例:100,“a”,“hello”

常量的分类:

        整型:100,125,-100,-125

        实型:3.12,0.125f,-3.7985

        字符型:“a”“b”“2”

        字符串:“abcd”“1234”

        ASCII码表:对于计算机而言只能识别二进制的数字,对于非数字的数据,如果要使用,就需要将其用一个数字型数据进行标识,就称之为ASCII码表。

#include 

int main(int argc,char *argv[])
{
    //注意在使用字符类型的数据时 %c输出字符%d输出ascii值
    char ch1='w';
    printf("%c %d",ch1,ch1);
    char ch2 = 115;
    printf("%c %d",ch2,ch2);
    return 0 ;
}

 执行代码结果如图所示

变量:其值可以改变的量叫做变量

定义变量的方式:

        存储类型 数据类型 变量名;

        存储类型 数据类型 变量名 = 变量或者常量;

变量在定义的时候要满足标识符的命名规则

        (1)只能由字母数字下划线组成

        (2)首字母不能是数字

        (3)不能关键字相同

1.09常量和变量按照类型区分

整型数据

        整型常量:(按进制分)

                十进制:以正常数字1~9开头 如457 45120

                八进制:以数字0开头 如0123

                十六进制:以0x开头 如0xle

        整型变量:

                有/无符号短整型(un/signed)short (int) 两个字节

                有/无符号基本整型(un/signed)int 四个字节

                有/无符号长整型 (un/signed)long int 四个字节(32位处理器中)

实型数据

        实型常量:实型常量也称之为实数或者浮点数

                十进制数形式:0.0 0.12 5.0 

                指数形式:123e3表示123乘以10的三次方

                         123e-3表示123乘以10的负三次方

                不以f为结尾的是double类型

                以f为结尾的是float类型

        实型变量

                单精度(float)和多精度(double)

                float型:占四个字节,7位有效数字,指数-37~38

                double型:占八个字节,16位有效数字,指数-307~308

字符数据

        字符常量:

                直接常量:用单引号括起来,如’a‘,’b‘

                转义字符:以反斜杠'\'开头,后面跟一个或几个字符,如'\n''\t'等,分别代表换行,换向跳格

        字符变量:

                用char定义,每个字符变量被分配一个字节的内存空间

                字符值以ascii码的形式存放在变量的内存单元中

        字符串常量:由双引号括起来的字符序列,如“哈哈哈”“abcd”

字符串常量与字符常量的不同:

        ’a‘为字符常量 “a”为字符串常量

        每个字符串的结尾,编译器都会自动添加一个结束标志位’\0‘

        即“a”包含了两个字符’a‘和’\0‘

1.10格式化输出字符

        %d 十进制有符号整数

        %ld 十进制long有符号整数

        %u 十进制无符号整数

        %o 八进制表示的整数

        %x 十六进制表示的整数

        %f float型浮点数

        %lf double型浮点数

        %e指数形式的浮点数

        %c 单个字符

        %s 字符串

        %p 指针

        使用%#o可以输出八进制数的前导符。

        使用%#x可以输出十六进制数的前导符。

1.11格式化输出字符的特殊应用

%3d   %03d   %-3d  %5.2f

%3d:要求宽度为3位,如果不足三位,前面空格补齐,若足够三位则无效

%03d:要求宽度为3位,如果不足三位,前面用0补齐

%-3d:要求宽度为3位,如果不足三位,后面补齐

%5.2f 宽度为5位,小数点保留后两位

1.12 类型转换

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及类型转换问题。

转换的方式有两种:自动转换:遵循一定的规则,由编译器系统自动完成。

                              强制类型转换:把表达式的运算结果强制转换成所需要的数据类型

自动转换的原则

        1.占用内存字节较少的类型转换成占用内存字节较多的类型,以保证精度不降低。

        2.转换方向:

嵌入式学习(一)嵌入式c语言_第2张图片

强制转换

通过类型转换运算来实现

        (类型说明符)(表达式)

在不同的情况中使用不同的关键字即可,一切需求来源于实际,由于之前没有一条完整的线将这一章穿起来,所以才有了这一篇幅的笔记,与君共勉。

你可能感兴趣的:(c语言,学习)