7.27
sizeof
c语言的操作符,用于计算为数据类型分配的内存的大小,以字节为单位
语法格式:
sizeof(数据类型或者变量);返回类型为: size_t
Demo:
#include
int main(void)
{
int myInt = 100;
size_t nSizeIntVar = sizeof(myInt); //sizeof()很像函数调用,但是一定要记住,sizeof()是运算符
//%lu 表示输出nSizeIntVar这个变量的时候,将其作unsigned
long来解释
printf(“the var myInt’s size is
%lu\n”,nSizeIntVar);
size_t nSizeInt = sizeof(int);
printf(“the Int’s size is
%lu\n”,nSizeInt);
float myFloat = 22.23f; //在字面常量后面加字母f表示,直接说明它是一个float,如果不加f,小数这样的字面常量属于double类型
printf(“the size of float var is
%lu\n”,sizeof(myFloat));
return 0;
}
数据类型
基本数据类型:
整型
字符型[char](占1个字节)
短整型[short int](占2个字节)
整型[int](占4个字节)
长整型[long int](占8个字节)
都分为有符号(siged)和无符号(unsiged)
整型字面值:
源代码直接书写的整型数值就是整型字面值(字面值就是字面值常量的缩写,其特点是指定了自身的值以后,不允许发生改变)
字面值还可以使用八进制表示(在数值前面以0开头)
还可以使用十六进制表示(在数值前面加0x开头)
枚举类类型(enum)
声明枚举类型的格式:
enum 枚举名{枚举值列表,列表以逗号隔开};
EG:
enum
weekDays{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};
在枚举中应罗列出所有可能值,这些也称为枚举元素。
枚举元素由系统定义一个从10开始的序号,如果程序员不赋值,第二个元素是上一个元素➕1.
定义一个枚举类型变量,可采用下述任一种:
enum weekDays myWorkDay;
enum weekDays {
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday }
myWorkDay;
enum {
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday }
myWorkDay;
对于枚举变量myWorkDay,它的值只能是枚举元素的其中一个,不能超出范围
作用:
枚举类型实际上是整型变量,只不过枚举类型是将一类有关联的标识符组合起来,增加程序的可读性和可维护性
浮点型
单精度[float](占4个字节)
双精度[double](占8个字节)
扩展精度[long double](占16个字节)
数组
相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组
数组是用一个单一的变量表示一个变量列表
是在内存中一块连续的存储单元,数据存在于这些单元中
数组的声明格式:
类型说明符 数组名[常量表达式]
EG:
int a[10]
表示数组名为a,有10个元素,并且每个元素的类型都是int型
注意:
常量表达式要有方括号括起来,不能用圆括号
常量表达式表示数组元素的个数,即数组长度,并且数组的第一个元素是从下标0开始的
常量表达式可以是常量也可以是符号常量,不能包含变量
数组名不能与其他变量名相同
允许在同一个类型说明中,说明多个数组和多个变量
使用数组时要注意,一定要小于定义数组的长度,放置数组溢出
数组名代表数组的地址,数组转化为指针用[]
数组在高地址,变量在低地址
数组初始化:
在定义数组时,对数组元素赋值 eg:int
a[10]={0,1,2,3,4,5,6,7,8,9} ;不能:int a[10];
a[10]={….};
可以只给一部分元素赋值 eg:int
a[10]={0,1,2,3,4};表示只给数组的前5个元素赋初值,后5个元素的值系统自动默认为0
在对全部数组元素赋初值时,可以不指定数组长度 eg:int a[5]={0,1,2,3,4};等于int
a[]{0,1,2,3,4};
数组必须先定义,后使用。只能逐个引用数组元素,而不能一次引用整个数组。
数组的引用形式为:数组名[下标](其中下标可以是整型常量,也可以是整型表达式eg:a[0]=a[5]+a[7]+a[2*3])
数组Demo:
int main(void)
{
int i,j;
int a[10];
for(i = 0;i <= 9;i++) //顺序给数组元素赋初
a[i] = i;
for(j = 0;j <= 9;j++) //顺序输出数组元素
printf(“%d”,a[i]);
return 0;
}
结构体
结构体是聚合类型,结构也是一值的集合,这些值称为它的成员(member),但是一个结构的各个成员可能具有不同的类型。每个结构成员都有自己的名字,它们是通过名字访问的
结构体的声明和定义形式
struct tag {成员列表}
变量列表(成员列表以分号隔开,变量列表以逗号隔开。tag可以省略
定义结构体
typedef:
EG:
struct
{
int age ;
int workExperience;
double salary;
}manager;
typedef
C语言支持一种叫作typedef的机制,它 允许你为各种数据类型定义新名字
EG:
声明:char
*prtToChar;是指变量prtToChar声明为一个指向字符的指针
对于结构体的声明:
typedef struct employee{
int age;
int workExperience;
double salary;
}employeeType;
后续定义雇员结构类型的时候,就可以直接使用这样的方式employeeType
manager
结构体初始化
EG:
struct
{
int age;
int workExperience;
double salary;
}manager = {20,10,15781.33};
注:只有在初始化的时候才能用{}来赋值
结构成员访问方法
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数,左操作数是结构变量的名字,右操作数就是需要访问的成员值
派生数据类型:
联合体(union)
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体
联合体是一个结构;
它的所有成员相对于基地址的偏移量都为0
union中可以定义多个成员,union的大小由最大的成员的大小决定
由于联合体中的所有成员是共享一段内存的,所以所有成员的首地址都是一样的,一次只能使用其中一个成员
对某一个成员赋值,会覆盖其他成员的值
union的存放顺序是所有成员都从低地址开始存放的
Demo:
#include
int main(void)
{
union{
int a;
char b;
double d;
//char arr[100]; 其结果是104
}myUnion;
//union类型的变量,其成员是共享内存,union类型的变量的大小是其成员最大的那个变量空间
printf(“the size of myUnion is
%lu\n”,sizeof(myUnion));
return 0;
}
聚合类型(如数组和结构)
字符串
字符串就是一串零个或多个字节,并且以一个位模式为全0的NUL字节结尾(\0)
字符串以字符常串常量的形式出现或者存储在字符数组中(字符串是以字符数组存放的)
计算机在储存字符串字面常量的时候,会自动在其末尾添加一个结束\0
附加:
getch():该命令可以在运行的时候按任意键退出,如果没有此命令,有时候屏幕闪一下就没了(程序结束就退出) ‘ ’:是字符
“ ”:是字符串
enum
weekDays myWorkDay;
enum
weekDays
{Monday,Tueaday,Wednesday,Thursday,Friday,Saturday,Sunday}myWorkDay;
enmu{
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday}myWorkDay;