基本数据类型

在这里插入图片描述

定义一个数据类型需要注意:
1)类型说明符
2)每种类型在计算机内存中占得字节
3)数据范围
4)表示方法
5)每种数据自身的运算方法
基本类型:构造简单,由系统实现定义
构造类型:复杂数据类型,一般由程序员将其他数据类型按一定规律构造而成
指针类型:指针变量中只能存放地址,主要用于解决动态数据的建立、删除和使用
空类型:主要用于数据类型的转换和定义函数的类型( 强制转换 )

int、char默认带符号
在这里插入图片描述
声明不分配空间:extern int i
在嵌入式开发中,考虑到代码的移植性,一定要注意系统默认无符号还是有符号
用typedef重新定义有无符号
例: typedef int sig_int
数据类型的转换:double <–float 高
long
unsigned
int <——char 、short 低
了解 输出/入函数格式控制字符 、数据类型修饰符
%s:用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志’\0’作为最后一个字符。
%*:表示本输入项在读入后不赋给相应的变量(赋值抑制符)
一般变量初始化的方法:
默认初始化规则:全局变量、静态变量(系统定义)
局部变量 (垃圾)
人工初始化:数值变量 字符变量 指针变量 数组
c语言的存储类型有四种:auto 、static 、register、extern
定义register时注意:1)只能是基本类型 int
2)不能取地址
3)不能定义成静态
进程空间的划分:分配方法:一在硬盘上开辟虚拟空间 。二软件实现(写时复制),在程序中给每个进程分 配
关键字:
register:请求编译器尽可能地将变量存在cpu内部寄存器中
使用时注意: register修饰变量的类型必须是CPU所接受的;
register变量可能不是在内存中存储,所以不能使用&来获取变量的地址
static 静态空间:程序开始时,存放在全局数据区,结束时释放空间,默认初始化为0,使用时可改变其值
例: void f(int c)
{ int a=0;
static int b=0;
a++;
b++;
printf("%d: a=%d, b=%d\n", c, a, b); 1: a=1,b=1
} 2:a=1,b=2
void main( ) 3: a=1,b=3
{ int i;
for (i=1; i<=3; i++)
f( i );
}
const:
const int *a; int const *a;是一个指向const int型的指针,a所指向的内存单元不可改写,所以(a)++是不允许的,但a可以改写,所以a++是允许的。int const a;a是一个指向int型的const指针,a是可以改写的,但a不允许改写。int const * const a;a是一个指向const int型的const指针,因此a和a都不允许改写const给读代码的人传达非常有用的信息。比如一个函数的参数是const char *,你在调用这个函数时就可以放心地传给它char *或const char *指针,而不必担心指针所指的内存单元被改写尽可能多地使用const限定符,把不该变的都声明成只读,这样可以依靠编译器检查程序中的Bug,防止意外改写数据。const对编译器优化是一个有用的提示,编译器也许会把const变量优化成常量

extern:表明变量或函数的定义在别的文件中,下面用到的这些变量或是函数是外来的,不是本文件定义的,提示编译器遇 到此变量或函数时,在其他模块中寻找定义;
如果一个函数只能被本文件中其它函数所调用,称为内部函数(或静态函数)。定义时在函数类型前加static。

struct:在网络协议、通信控制、嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流(char型数组),而是 多种数据组合起来的一个整体,其表现形式是一个结构体“结构体名”用作结构体类型的标志;
花括弧内是该结构体中的各个成员,由它们组成一个结构体;
在结构体内对各成员都应进行类型声明;
“成员表列”也称为域表。每个成员也称为结构体中的一个域,成员名命名规则与变量名一样;
每个成员名前的类型标识符可以为已经定义了的任意类型,当然可以是结构体类型标识符,即结构体成员也可以是另一个结构体变量。
此处只是构造出一个新的类型,并没有定义该类型的变量,因此在内存中并没有开辟任何存储空间;
在程序中可以定义多个结构体类型,不同结构体类型用不同的结构体名来区分。
①引用形式:结构体变量名. 成员名“.”是成员运算符,在所有的运算符中优先级最高。
②不能将一个结构体变量作为一个整体进体输入输出,只能对结构体中的各个成员分别进行输入输出。
③不能用指向结构体变量的指针指向该结构体变量的某个成员。
④访问结构体成员变量的三种方法:
stu.num、stu.name、stu.score
(*p).num、(*p).name、§.scorep
->num、p->name、p->score
“->”为指向运算符,是优先级最高的运算符;
成员运算符“.”的优先级高于指针运算符“”,因此采用 “(*p).成员名” 形式时,括号不能省略;
在定义结构体变量的同时,可以进行初始化结构体变量的各个初值用花括号{ }括起来,大括号内各个成员变量的值之间用逗号分隔,其值必须与成员变量一一对应,且数据类型应与成员变量一致。

union(共用体)当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处;可以把一个整型变量、一个字符型变量、一个实型变量放在同一个地址开始的内存单元中。即使几个不同的变量共占同一段内存空间。所谓“共用体(union)”是指使几个不同的变量共占同一段内存的数据类型。

define 宏定义

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值