C语言概述和数据类型

C语言

一、概述

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

操作系统内核开发用的是C语言实现

2.为什么操作系统选择用C语言进行开发?(即C语言的特点)

1) C语言具有出色的移植性,能够在多种不同体系结构的软件平台中实现

2) C语言简洁紧凑,使用灵活的语法机制,并且能够直接访问硬件

3) C语言有很高的运行效率


3.嵌入式开发中的地位——开发工具

1) 面向过程(结构)处理机制:操作具体事务(追究实现原理)

2) 面向对象处理机制:解决宏观事物(追究实现对象)代码的复用性,维护性,扩展性

复用性:功能代码不做修改,直接调用

维护性:代码出错可直接修改

扩展性:加入新功能时,可直接修改

C语言之父:丹尼斯·里奇

C语言标准:K&RCANSIC/C89  C99标准  C11标准  【gcc支持C89,部分支持C99

二、数据结构(基本类型,复合类型)

1.数据结构:数据集合的划分,不同数据类型对CPU的意义是不一样的

 



① 整型变量                    int a;

② 整型指针变量               int  *a;

③ 整型指针的指针变量         int  **a;

④ 整型数组                   int a[10];

⑤ 整型指针数组               int *a[10];

⑥ 整型数组指针变量           int (*a)[10];

⑦ 整型函数指针变量           int (*a)(int);

⑧ 整型函数指针数组           int (*a[10])(int);

⑨ int *(*(*fp1)(int))[10];

fp1:函数指针变量,该函数指针指向一个形参为int,返回值为数组指针,该数组指向一个整型指针数组。

⑩ int *(*(*arr[5])())();

arr:函数指针数组,该函数指针指向一个形参为int,返回值为函数指针的函数,该函数指针指向一个形参为空,返回值为整型指针

11 float (*(*b())[])();

b:指针函数,函数形参为空,返回数组指针,该指针指向一个函数指针数组,该数组元素指向形参为空,返回值为float的函数

12 void *(*c)(char ,int(*)());

C:函数指针变量,指向函数形参为char,函数指针,返回值为void *

13 void **(*d)(int*,char**(*)(char*,char **));

d:函数指针变量,该函数形参为int*,另一形参为函数指针变量,该函数形参为char*char**,返回值为指向指针的指针变量,原函数返回值为指向指针的指针变量

14 float (*(*e[10])(int *))[5];

e:函数指针数组,该函数指针指向形参为int*,返回值为数组指针,该数组指针指向5float

 

 

2.强制转化

char<int<float<double

顺序是进行隐式类型转化

 

 

3.字节长度

字节:8位  半字:2字节, 字:4字节

数据类型   charshortintlongfloatdoublelong long

字节长度   1244488

sizeof作为一个运算符有两种表示方式:sizeof a a为变量名

Sizeof (int):int为数据类型

Sizeofstrlen的区别

  1 #include <stdio.h>

  2 #include<string.h>

  3

  4 int main()

  5 {

  6     char a[]="hello";

  7     printf("sizeof(a)=%d\n",sizeof(a));

  8     printf("strlen(a)=%d\n",strlen(a));

  9

 10     char b[100]="hello";

 11     printf("sizeof(b)=%d\n",sizeof(b));

 12     printf("strlen(b)=%\n",strlen(b));

 13

 14     char *c="hello";

 15     printf("sizeof(c)=%d\n",sizeof(c));

 16     printf("strlen(c)=%d\n",strlen(c));

 17

 18

 19      return 0;

 20 }

运行结果

sizeof(a)=6//加上‘\0

strlen(a)=5

sizeof(b)=100//数组分配100

strlen(b)=5

sizeof(c)=4//指针固定4字节

strlen(c)=5

 

指针保存地址,地址在32位电脑中为固定长度4字节,所以不管什么类型,所有指针的sizeof都是4

 

4.对于char型而言:无符号的取值范围:0~255,有符号的取值范围:-128~127

正数:原码=补码

负数:原码=补码取反+1   补码=原数的绝对值取反+1

常量是有符号的所以~2=%d=-3

有符号和无符号的区别

有符号数和无符号数进行比较运算(==,<,>,<=,>=)时,无符号数隐式转化为有符号数

 

 

 

5.变量与常量

变量的三大特点

1) 变量的数据类型:主要说明变量占内存空间大小如int

2) 变量的作用域:作用域变量的有效性范围,即变量的使用范围

3) 变量的存储类型:变量在内存中的存储方式

 

  

 

6.全局变量与局部变量的区别:

从作用域看:
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。
局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
从分配内存空间看:
全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。
从初始化角度看
全局变量在没有初始化的时候,默认为零;局部变量在没有初始化时值随机。虽然全局变量默认为0,但是还是定义一下。

 

7.声明和定义
定义:创建一个变量,为其分配内存空间,并为他取名,一个变量只能定义一次。

声明:告知编译器,变量名已匹配在一块内存上了,但未为其分配内存。

声明的分类:1.定义性声明:既定义又声明2.引用型声明:只声明不定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值