学习总结
基础篇(二)
一 、基础数据类型
类型关键字:char
char ls='a';//char的内存大小为1字节
//一般用于处理基于ASCII表的字符
类型关键字:short
short ls=2; //内存大小为2字节的整数类型
类型关键字:int
int ls=4; //内存大小为4字节的整数类型
类型关键字:long
long ls=4;//在不同操作系统中的内存大小不同
//在x86(32位系统)中long 的内存大小为4字节
//在x96(64位系统)中long 的内存大小为8字节
类型关键字:long long
long long ls=8;//内存大小为8字节的整数类型
类型关键字:unsigned
unsigned ls=4;//在默认情况下为unsigned int 类型
//表示无符号的4字节整数类型
//无符号 一般表示 无负号 “ - ”
//unsigned 可与其他整数类型关键字联合使用
//例如
unsigned short ls1=2;//表示无符号2字节的整数类型
unsigned int ls2=4;//表示无符号4字节的整数类型
unsigned long ls3=4;//表示无符号4/8字节的整数类型
unsigned long long ls4=8;//表示无符号8字节的整数类型
//在无符号整数变量与有符号整数变量执行运算时 负数以补码的形式进行计算
所以在使用unsigned 定义变量是 需注意与其他变量进行运算是需注意是否有无符号
类型关键字:float
float ls=4.0;//内存大小为4字节的浮点数类型
//float的小数点后有效位为 6-7位
类型关键字:double
double ls=8.0;//内存大小为8字节的浮点数类型
//double的小数点后有效位为 15-16位
类型关键字:long double
long double ls=16.0;//内存大小位16字节的浮点数类型
//long double的小数点后有效位为 18-19位
浮点数类型关键字不能与unsigned联合使用
二、数组
1、[ ]的三种作用
1)声明变量的时候有 [ ] ,表示声明的是数组变量
2)函数参数有 [ ] ,此时表示指针(或者也可以看作传入一个数组参数)
3)变量名(数组首地址)+ [无符号整数 ] ,表示下标运算
2、一维数组
1)字符串数组/字符串
定义:
1、以‘ \0 ’结尾的字符数组
2、输出输入方式:
//c++ 输入输出
//在有初始化内容时,编译器会自动判断数组大小
//在无初始化内容时,需指定数组大小
char name[4]{};
char name1[]{"hello world!"};
std::cin>>name;
std::cout<<name;
//C语言 输入输出
scanf("%s",name);//%s 表示输入输出的为ASCII码字符
printf("%s",name);
字符/字符串常见的4种声明方式
//在有初始化时,数组表示的是常量内容
char ls[16]{"hello world!"};
char *ls1="hello wworld!";
char ls2[]{"hello world!"};
char ls='a';
2)整数数组
整数一维数组与字符串数组声明方式相同
int ls[16]={0};
int ls[]{1,2,3,4};
//初始化时每个整数之间需要用 “,”逗号分隔
- 浮点数数组
与整数一维数组声明方式相同
float ls[16]={0};
double ls1[]{1.23,2.34,3.45,4.56};
//初始化时每个浮点数之间需要用 “,”逗号分隔
4)取值运算符 &
//数组的变量名为此数组的内存首地址
int ls[8]={0};
ls==&ls[0]//首元素的内存地址
&ls[0];&ls[1];//单个元素的内存地址
&a;//数组的首地址
5)下标
//数组的下标从0开始到申请数组的数量-1结束
int ls [4]{};
ls[0]=0;//数组的第一个元素
ls[1]=1;
ls[2]=2;
ls[3]=3;//数组的最后一个元素
3、多维数组
1)二维数组的声明方式
int ls[2][2]{};
int ls[2][2]{ { 1,2 }, {2,3} };
//多维数组的方式以此类推即可
2)二维数组的取地址
int ls[2][2]{};
&ls[0][0];//二维数组的首地址
&ls[1][1];
4、数组在内存中时如何实现的
数组在内存中就是一串连续的内存空间
int ls[2]{};
std::cout << &ls[0] << std::endl;//内存地址为 0019FC2C
std::cout << &ls[1] << std::endl;//内存地址为 0019FC30
std::cout << &ls[2] << std::endl;//内存地址为 0019FC34
由上图可看出每个元素之间都相差4字节大小的内存空间
同样多维数组也是一串连续的内存空间
int ls[2][2] = {0};
std::cout << &ls[0][0] << std::endl;//内存地址007CF9C
std::cout << &ls[0][1] << std::endl;//内存地址007CFA0
std::cout << &ls[1][0] << std::endl;//内存地址007CFA4
std::cout << &ls[1][1] << std::endl;//内存地址007CFA8
由上图可看出多维数组也是一串连续的内存空间
所以我们可以使用指针的方式来访问二维数组
int ls[2][2] = {0};
int* p={&ls[0][0]};//指针P指向了 二维数组ls的首地址
//此时 p可以使用一维数组的方式访问与从新赋值二维数组内元素的数据
//例如
int main()
{
int ls[2][2] = { 0 };
int* p = { &ls[0][0] };//指针P指向了 二维数组ls的首地址
//此时 p可以使用一维数组的方式访问二维数组的数据
//例如
ls[0][0] = 555;
ls[0][1] = 2;
ls[1][0] = 666;
std::cout << "ls[0][0]=" << ls[0][0] << std::endl;
std::cout << "ls[0][1]=" << ls[0][1] << std::endl;
std::cout << "ls[1][0]=" << ls[1][0] << std::endl;
std::cout << "==================" << std::endl;
std::cout << "p[0]=" << p[0] << std::endl;
std::cout << "p[1]=" << p[1] << std::endl;
std::cout << "p[2]=" << p[2] << std::endl;
std::cout << "==================" << std::endl;
p[0] = 777;
std::cout << "p[0]=" << p[0] << std::endl;
std::cout << "ls[0][0]=" << ls[0][0] << std::endl;
return 0;
}