【嵌入式学习】第0部分-LinuxC基础

1.C语言写代码的步骤

 第一步:编辑源代码(使用vi或者其他编辑器 比如VScode)
 第二步:编译。编译就是用编译器把源程序转化成可执行程序的过程,编译要用到编译器。
               我们在linux中使用编译器一般是gcc。
               譬如:gcc hello.c 把当前目录下hello.c文件编译,得到的可执行文件名字叫a.out
               也可以自己指定编译后生成的可执行程序的名字,使用gcc hello.c -o hello

 第三步:执行编译生成的可执行程序,执行方式是./hello
 第四步:调试。当你执行后发现程序结果不对,不是自己想要的,这时候就是返回来看源代码                      哪里不对,然后修改,再编译执行,再看结果。如此循环直接结果正确。


2.VMWare共享文件夹的使用

      在linux中,直接到 /mnt/hgfs目录下,即可找到刚才第二步中Name相同的名字的文件夹,这个目录即是第一步中Windows中目录在linux下的映射。

3.C语言数据类型

基本数据类型分为整形、实型、字符型;

3.1整形

      C语言中的整形对应数学中的整数,整形变量是用来描述一个整数值的,整形变量经过计算后也只能是整数(整型),不可能出现小数(浮点型)

3.2浮点型

      C语言中浮点型对应数学中的小数。浮点型有float和double两种,使用方式相同,不同在于 表示范围和精度。float表示的范围小,精度低(小数点后6位);而double表示范围大,精度高。(小数点后16位); 范围是说表示的数有多大,精度是指这个数的分辨率有多细

3.3字符型

    字符型对应ASCII字符。ASCII字符是一种编码,就是用数字编码来表示一个符号的一种方法!

3.4有符号数和无符号数

有符号数

整形:signed int(简写为 int)
            signed long,也写作signed long int,(简写为long)
            signed short,也写作signed short int(简写为short)
            signed(表示signed int)
浮点型
            signed float(简写为float)
            signed double(简写为double)
字符型
            signed char(简写为char)


无符号数

整形:整形无符号数,用来表示一些编码编号之类的东西。譬如身份证号,房间号
              unsigned int(没有简写)
              unsigned long int(简写unsigned long)
              unsigned short int(简写为unsigned short)
对于float和double这种浮点型数来说,只有有符号数,没有无符号数。 从绝对数值来说,无符号数所表示的范围要大一些。因为有符号数使用1个二进制位来表示正负号。对于整形和字符型来说,有符号数和无符号数表示的范围是不同的,譬如字符型,有符号数范围是-128~127,无符号数的范围是0~255。

4.程序结构

4.1、switch case

1、case中必须是常数,而且必须是整形(不能是float double,可以是int char)
2、一般来说,每个case中代码段后都必须有一个break
3、case之后一般都会有default。语法上允许没有default,但是建议写代码时一定要写。

4.2、switch case和if else对比

1、if else适合对比条件比较复杂,但是分支比较少的情况;switch case适合那种对比条件
     不复杂,但是分支数很多的情况。

2、所有的选择结构,其实都可以用if else来实现。但是只有部分才可以用switch case实现。
 
一般的做法是:在适合使用switch case的情况下会优先使用switch case,如果不适合使用       switch case,则不得不使用if else。

5.复合数据类型

所谓复合数据类型,是指由简单数据类型,经过一定的数据结构封装,组成新的数据类型,譬如数组、结构体。

5.1数组的初始化

第一种:完全初始化。依次赋值
第二种:不完全初始化。初始化式中的值从a[0]开始,依次向后赋值,不足的默认用0填充赋值

5.2数据类型的实质

C语言程序中,变量的实质就是内存中的一个格子。当我们定义(创造一个变量)了一个变量后,
就相当于在内存中得到了一个格子, 这个格子的名字就是变量名,以后访问这个内存格子就使用该变量名就行了。这就是变量的本质。

数据类型的实质是内存中格子的不同种类。譬如在32位机器上

短整形格子(short) 占用2字节空间 16位
整形格子(类型是int)占用4字节空间 32位
单精度浮点型格子(float)占用4字节空间
双精度浮点型格子(double)占用8字节空间 64位
字符型格子(char)

占用1字节空间 8

5.3.sizeof运算符

作用:返回一个变量或者一个数据类型的内存占用长度,以字节为单位。

在C语言中引用一个单个字符时,应该用单引号''括起来,譬如'a'。定义数组同时初始化,则可以省略数组定义时[]中的长度。C语言编译器会自动推论其长度,推论依据是初始化式中初始化元素的个数。 由此可知,省略[]中数组元素个数只有一种情况。那就是后面的初始化式必须为完全初始化。

在C语言中引用一个字符串时,应该用""括起来,譬如"abcde","abcde"实际上有6个字符,分别是'a' 'b' 'c' 'd' 'e' '\0'!

5.4指针与数组的初步结合

数组名:做右值时,数组名表示数组的首元素首地址,因此可以直接赋值给指针。比如: int a[5];  a和&a[0]都表示数组首元素a[0]的首地址。 而&a则表示数组的首地址。比如: int a[5];  int *p; p = a;数组的方式依次访问:a[0]  a[1]    a[2]    a[3]    a[4]。指针的方式依次访问: *p   *(p+1)  *(p+2)  *(p+3)  *(p+4)!!

5.5指针与++.--符号进行运算

       指针本身也是一种变量,因此也可以进行运算。但是因为指针变量本身存的是某个其他变量的地址值,因此该值进行* / %等运算是无意义的。指针变量+1,-1是有意义的。+1就代表指针所指向的格子向后挪一格,-1代表指针所指向的格子向前挪一格。
       *p++就相当于*(p++),p先与++结合,然后p++整体再与*结合。
       
*p++解析:++先跟p结合,但是因为++后置的时候,本身含义就是先运算后增加1 (运算指的是 p++整体与前面的*进行运算;增加1指的是p+1),所以实际上*p++符号整体对外表现的值是*p的值,运算完成后p再加1.所以*p++等同于:*p;   p += 1; *++p等同于 p += 1;   *p;
          (*p)++,使用()强制将*与p结合,只能先计算*p,然后对*p整体的值++。
          ++(*p),先*p取值,再前置++,该值+1后作为整个表达式的值。
         
总结:++符号和指针结合,总共有以上4种情况。--与++的情况很类似。

本书所附光盘使用说明 本光盘中包括了书中所有示例的源代码和书中所有的插图,具体说明如下。 程序代码文件夹中包含了本书的所有源代码。 程序代码\chapter02 文件夹中包含了第2章的示例源程序。其中hello.c和hello.h是2.3.2的源代码,gdb.c是2.4.1的源代码,test.c是动手练练的源代码。 程序代码\chapter06 文件夹中包含了第6章的示例源程序。其中pointer1.c是6.2.2的第一个源代码,pointer2.c是6.2.2的第二个源代码,pointer3.c是6.2.2的第三个源代码,pointer4.c是6.2.3的第一个源代码,pointer5.c是6.2.3的第二个源代码,pointer6.c是6.2.3的第三个源代码,pointer7.c是6.2.3的第四个源代码。 程序代码\chapter08 文件夹中包含了第8章的示例源程序。其中binary_tree.c是二叉树的源代码,list.c是线性链表的源代码。 程序代码\chapter09 文件夹中包含了第9章的示例源程序。其中lock.c是文件锁的源代码,seri.c和seri.h是串口设置的源代码,read_seri.c是读串口的源代码,write_seri.c是写串口的源代码。 程序代码\chapter10 文件夹中包含了第10章的示例源程序。其中alarm_read.c是设置信号函数的源代码,dameon.c是守护进程的源代码,zombie.c是僵尸进程的源代码。 程序代码\chapter11 文件夹中包含了第11章的示例源程序。其中socklib.c是网络相关通用函数的源代码,tracert.c是traceroute的源代码,webserv.c是web服务器的源代码。 程序代码\chapter12 文件夹中包含了第12章的示例源程序。其中skull.c是skull驱动程序的源代码,s3c2410fb.c和s3c2410fb.h是LCD驱动的源代码。 程序代码\chapter13 文件夹中包含了第13章的示例源程序。其中args_cmd.h是解析命令相关的头文件,ctrl.c和ctrl.h是控制命令的源代码,proc_cmd.c是具体操作的源代码,thread.c和thread.h是线程相关的源代码,types.h是类型相关的源代码,net_send.h是网络相关的源代码。 书中插图包含了本书所有的插图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值