基础:
sizeof(数据类型
/变量
)
输出默认六位有效数字,要显示更多,要配置
short 2 int 4 long 4/8 longlong
8
short 4 double 8
3e2 = 3*10^2
3e-2 = 3*10^-2
float f1
= 3.14f;
double d1
= 3.14;
char 1个字节,将对应的ascii编码放在存储单元
查看字符对应ascii码:
int(ch
)
a
-- 97
A
-- 65
字符串:
c风格字符串:
char str1
[] = "helloworld";
c
++风格字符串:string str2
= "helloworld";(要包含string库
)
bool值:
cout 后为
0/1
1个字节大小
数据的输入:
记得初始化
输入
bool值,非
0值都代表真
除法运算符:
int 与
double 不同
两个小数不能进行取模运算
三目运算符可以用来赋值,也可以用来被赋值
switch,
case:
int score
= 0;
cin
>> score
;
switch (score
)
{
case 10 :
cout
<< " ";
break;
case 9 :
cout
<< ""
default:
cout
<<" "
}
switch缺点:判断只能是整型,或者字符型,不可以是一个区间,记得写
break,不然程序会一直执行
猜数字:
添加随机数种子:
#include <ctime> (才能使用time)
srand((unsigned int) time(NULL))
随机生成数字:
int num
=rand()%100+1;
水仙花数:(三位数)
a
=num
%10;个位
b
=num
/10%10;十位
c
=num
/100;百位
数组:
int a
[5];再赋值
int b
[5] = {1 ,2 ,3 ,4 ,5};
int c
[] = {1 ,2,3,4,5,6,7};
一维数组:
sizeof(arr
) 整个数组占用内存
sizeof(arr
[0]) 每个元素占用内存
数组中元素的个数 上面两个相除
cout
<< arr
;数组
16进制地址
cout
<< (int)arr
;10进制地址
第二个元素的地址
&arr
[1]
重点:数组名是常量,不可以用来赋值
五只小猪称体重
:
先认定一个最大值
0;
遍历数组;
元素逆置:
双指针
/双下标
if start
>=end 退出循环
或者 start
>end 进行循环
while(start
> end
)
{
int temp
= a
;
a
= b
;
b
=temp
;
start
++;
end
--;
}
冒泡排序:
对每一对相邻,执行操作,获得第一个最大
每次比较次数减一
i:
0到n
-1(不包含n
-1)
int i
=0;i
<n
-1;i
++
j:
0到n
-1-i(不包含n
-1-i)
int j
=0;j
<n
-1-i
;j
++
为什么不包含最后一个数呢,明明也要遍历到!
因为我们比较的是arr
[j
]和arr
[j
+1]
二维数组的定义:
int arr
[2][3];
arr
[0][0] = ...;先定义后赋值
int arr
[2][3]=
{
{1,2,3},
{4,5,6}
};
int arr
[2][3] ={1 ,2, 3, 4, 5, 6};
int arr
[][3]={1,2,3,4,5,6}
sizeof(arr
)整个数组所占内存空间
sizeof(arr
[0])二维数组第一行所占用内存空间
sizeof(arr
[0][0])二维数组第一个元素所占用内存空间
二维数组行数:
sizeof(arr
)/sizeof(arr
[0])
二维数组列数:
sizeof(arr
[0])/sizeof(arr
[0][0])
第二行首地址:arr
[1]
指针所占内存空间:
sizof(
int * )
32位操作系统
4个字节
64位操作系统
8个字节
空指针:
用于给指针变量初始化
空指针不可以进行访问
,若访问,则报错;
nullptr 也是
0
0到
255时系统所占用的,因此不可以访问。
野指针:
指向非法空间
int *p
= (int *)0x1100;
cout
<< *p
<< endl
;会报错,没有权限
const修饰指针:
1. const int *p
=&a
;
常量指针
指针指向的值不可以改
指针可以改
2. int * const p
=&a;
const后面跟着变量,所以是常量
指针常量
指针指向的值可以改
指针不可以改
3. const int * const p
= &a;
都不可以改
指针和函数
void swap(int a
,int b
)若按值传递,不会改变a和b的值,只会改变函数内临时变量的值
void swap(int *a
,int *b
)可以改变a和b的值
对数组进行冒泡排序:
需要传入数组首地址,以及数组长度
结构体:
创建结构体变量时,
struct关键字可以省略
Student s1;
s1
.name
= ...;
Student s1
= {"李四",20,80};
结构体数组:
=
{
{ } ,
{ } ,
{ }
}
结构体指针:
Student
* p
=&s
;
p
-> name
;
嵌套结构体:
Teacher T;
T
.stu
.name
= "小王";
结构体作为参数:
按值传递:形参改变不会改变实参
按指针传递:有隐患,有权限改变实参,加上
const,即传入参数时,
const student s,防止误操作