c++中的数据类型
1.数据类型简介
c++中数据类型分为两种:预定义类型和自定义数据类型。
预定义类型:整型(int 4个字节)
字符型
布尔型 (bool)
浮点型(4个字节)
空类型:关键字void,不能用于普通变量的声明和普通的操作,只能用于指针型变量,函数返回值和函数参数。
指针类型
自定义类型:数组、结构体(struct)、联合体(union)、枚举(enum).具体在下边介绍
2.类型修饰符:
signed,unsigned,short,long。
signed int a;//有符号整数
short int a;//短整型,2个字节
long int a;//长整型,4个字节
c++11中新增:long long整型有两种:long long和unsigned long long。在C++11中,标准要求long long整型可以在不同平台上有不同的长度,但至少有64位。我们在写常数字面量时,可以使用LL后缀(或是ll)标识一个long long类型的字面量,而ULL(或ull、Ull、uLL)表示一个unsigned long long类型的字面量。比如:
long long int lli = -9000000000000000000LL;
unsigned long long int ulli = -9000000000000000000ULL;
另外这几个符号只能修饰int。
3.占位符总结:
%d:int
%ld:long
%f:float
%lf:double
%p:输出变量地址
%x/%X:输出十六进制数
%s:输出字符串
%o:无符号八进制整数
%u:无符号十进制整数
%e/%E:用科学记数法输出浮点数
4.基本数据类型代码示例:
#include"stdio.h" int a; float b; double c; void ceshi(); int main(void) { int d; int num=2147483646;//和最大值差1 最大值:2147483647 float f=1.234567; char arr[]="abc"; printf("num=%d\n",num+21);//-2147483648; printf("f=%f\n",f/4);//0.308642 printf("arr的地址:%p\n",arr);//0028FEFC printf("arr的字符串:%s\n",arr);//abc long int lnum; printf("长整型占用字节数:%d\n",sizeof(lnum));//4 printf("整型占用字节数:%d\n",sizeof(num));//4 printf("默认值:%d\n",lnum);//38 随机的 printf("main默认值:%d\n",d); //随机数 printf("默认值:%f\n",b); //0.000000 printf("默认值:%f\n",c); //0.000000 printf("默认值:%lf\n",c); //0.000000 ceshi(); return 0; } void ceshi(){ int a=2,b=3,c=5,num; num=a+b%c; printf("jisuan: %d\n",num);//5 char cc[64]; scanf("%s",cc); printf("输入的值为:%s aa\n",cc); }
5.结构体数据类型
5.1结构体是由一系列具有相同类型或者不同类型的数据构成的数据集合。
定义:
struct 名称{
数据类型 变量名1;
数据类型 变量名2;
。。。。
数据类型 变量名n;
}结构体变量名;
5.2结构体数组:
struct Info{
int age;
char name[32];
}info[SIZE];
5.3结构体嵌套:
struct BookInfo{
char name[SIZE];
char author[SIZE];
int status;
};
struct ReadreInfo{
char Name[SIZE];
char Date[SIZE];
};
//结构体嵌套
struct LibraryInfo{
int ID;
struct BookInfo book;
struct ReadreInfo reader;
}LibraryInfo;
代码示例:
#include <stdio.h> #define SIZE 32 int main(void){ struct BookInfo{ char name[SIZE]; char author[SIZE]; int status; }; struct ReadreInfo{ char Name[SIZE]; char Date[SIZE]; }; //结构体嵌套 struct LibraryInfo{ int ID; struct BookInfo book; struct ReadreInfo reader; }LibraryInfo; printf("input the book id:\n"); scanf("%d",&LibraryInfo.ID); printf("input the book name:\n"); scanf("%s",LibraryInfo.book.name); printf("input the book author:\n"); scanf("%s",LibraryInfo.book.author); printf("input the book status:\n"); scanf("%d",&LibraryInfo.book.status); printf("input the reader name:\n"); scanf("%s",LibraryInfo.reader.Name); printf("input the reader BorrowDate:\n"); scanf("%s",LibraryInfo.reader.Date); printf("图书信息如下:\n"); printf("图书编号:%d\n",LibraryInfo.ID); printf("书名:%s\n",LibraryInfo.book.name); printf("图书作者:%s\n",LibraryInfo.book.author); printf("图书当前状态:%d\n",LibraryInfo.book.status); printf("读者姓名:%s",LibraryInfo.reader.Name); printf("借阅日期:%s",LibraryInfo.reader.Date); return 0; }
6.联合体
联合体的使用方式和结构体及普通变量类似。
union 名称{
类型变量符 变量名;
......
类型变量符 变量名;
};
联合体的主要作用就是节省内存,因为联合体中的·变量不像结构体中的成员变量那样,系统会给其中的每一个变量都分配相应的内存。在联合体中,所有的成员变量共享一块内存空间。该内存空间是其成员变量中占字节数最多的变量所占用的内存空间,并且所有的成员变量共用这一块内存空间,因此联合体中所有成员变量地址是一样的。
示例代码:
#include <stdio.h> #define SIZE 32 int main(void){ union Info{ int age; char Name[32]; char Address[64]; }info; printf("input age:\n"); scanf("%d",&info.age); printf("age:%d\n",info.age); printf("input name:\n"); scanf("%s",info.Name); printf("name:%s\n",info.Name); printf("input address:\n"); scanf("%s",info.Address); printf("address:%s\n",info.Address);//jinan printf("name:%s\n",info.Name); //jinan 和上边的一样,被覆盖 printf("age:%d\n",info.age); //1634625898 printf("name地址:%p\n",info.Name); printf("age地址:%p\n",&info.age); //0028FED0地址和上边一样 return 0; }
、、
从图中可以看出:最下边address和name最后的输出是一样的,jinan把前边的chaochao覆盖掉啦
另外它所有变量的地址也是一样的。
7.枚举类型
enum 枚举类型名{
元素列表;
};
例:enum Season{SPRING,SUMMER,AUTOMN,WINTER};
示例代码:
#include <iostream> #include <stdio.h> using namespace std; int testEnum(); int main() { cout << "Hello world!" << endl; testEnum(); return 0; } //枚举类型中的变量为整型常量,除了定义时可以赋值外,其他时间都不可以 int testEnum(){ enum FourSeason1{ SPRING, SUMMER, AUTOMN, WINTER }; enum FourSeason2{ SPRING2=2, SUMMER2, AUTOMN2, WINTER2 }; enum FourSeason3{ SPRING3=1, SUMMER3, AUTOMN3=5, WINTER3 }; enum FourSeason1 curSeason1,PreSeason1; enum FourSeason2 curSeason2,PreSeason2; enum FourSeason3 curSeason3,PreSeason3; curSeason1=WINTER; PreSeason1=AUTOMN; curSeason2=WINTER2; PreSeason2=AUTOMN2; curSeason3=WINTER3; PreSeason3=AUTOMN3; printf("curSeason1 is %d\n",curSeason1);//3 printf("PreSeason1 is %d\n",PreSeason1);//2 printf("curSeason2 is %d\n",curSeason2);//5 printf("PreSeason2 is %d\n",PreSeason2);//4 printf("PreSeason2 is %d\n",curSeason3);//6 printf("PreSeason2 is %d\n",PreSeason3);//5 printf("SUMMER3 is %d\n",SUMMER3);//2 SUMMER3 cout << SUMMER3 <<endl; return 0; }
先写这么多,以后再补充。。