常量
1.常量分宏常量和装饰常量
#define宏常量:#define 常量名 常量值
const修饰的变量:const数据类型 常量名=常量值
example:
#define Day 7
const int day=12;
c++关键字
标识符命令规则:、
1.标识符不能是关键字
2.标识符只能由字母,数字,下划线组成
3.第一个必须是字母或者下划线
4.标识符区分大小写
数据类型
1.整型:
数据类型 变量名 = 变量初始值,short,int,long,long long
int a = 10;
2.浮点型:
单精度float
float f = 1.14f;
double f = 1.12;
双精度double
3.sizeof关键字:
cout << "short 类型所占内存空间:"<<sizeof(short)<<endl;
4.科学计算法:
float f = 3e2;
float f = 3e-2;
字符型:
char ch = 'a';
字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII
编码放入存储单元
in main(){
char ch = 'a';
cout << ch <<endl;
cout << sizeof(char)<<endl;
}
char ch = 'a';
cout << ch << endl;
sizeof(char);
cout <<int(ch)<<endl;
字符串
char 变量名[] = "字符串值";
char str[] = "Hello world!";
string str = "hello world";
cout <<str<<endl;
布尔类型:
int main(){
bool flag =true;
cout << flag <<endl;
cout <<sizeof(bool)<<endl;
}
数据的输入:
cin >> 变量
{
int a = 0;
cout << "请给整形变形a赋值:"<<endl;
cin >>a;
bool flag = true;
cin >> flag;
cout << flag <<endl;
}
运算符:
+-*/
%:取余数
++
比较运算符:
==,!=,<,>,<=,>=
逻辑运算符
!:非,&&:与,||:或
程序流程结构:
1.选择结构:
三目运算符: 表达式?表达式1:表达式2; a>b?a:b;
switch(表达式)
{
case 结果1: 执行语句;break;
case 结果2: 执行语句;break;
...
default:执行语句;break;
}
2.循环结构:
#include <ctime>
srand(unsigned int)time(NULL);
while(循环条件){循环语句}
产生随机数:
rand()%100 就生成0--99之间的随机数
while(1){
break;
}
do...while循环语句
作用:满足循环条件,执行循环语句
语法:do{循环语句} while(循环条件);
先执行一次,在判断条件
for循环语句:
for(起始表达式;条件表达式;末尾循环体){循环语句}
{
for(int i = 0; i<100; i++){
cout <<i << endl;
}
}
跳转语句:
1.break语句:退出循环
2.continue:执行到本行就不再执行后面的代码了,而继续执行下一轮循环
{
for(int i=0; i<=100; i++){
if(i%2==0){
continue;
}
cout <<i<<endl;
}
}
3.goto:无条件跳转语句
{
goto FLAG;
FLAG:
}
数组:
一维数组:
数据类型 数组名[数组长度]
数据类型 数组名[]={值1,值2,值3...}
数据类型 数组名[数组长度]={数据1,数据2}
arr[0] arr[1]
sizeof(arr)
数组名是常量,不可以进行赋值操作
example:
{
int arr[] = {300,350,200,400,250}
int max = 0
for(int i=0
if(max<arr[1]){
max = arr[i]
}
}
cout<<max<<endl
}
int start=0
int end=sizeof(arr)/sizeof(arr[0])-1
二维数组:
数据类型 数组名[行数][列数] = {{值1,值2,值3...},{值1,值2,值3,..}}
函数:
返回值类型 函数名 参数列表
{
函数体语句
return 表达式
}
example:
int add(int num1,int num2){
int num = num1+num2;
return num;
}
值传递:
void swap(int num1, int num2){
cout << "交换前:"<<endl;
}
函数的常见样式:
提前告诉编译器函数存在:
int max(int a, int b);
函数的分文件编写:
1.创建后缀名为.h的头文件
2.创建后缀名尾.cpp的源文件
3.在头文件中写函数的声明
4.在源文件中写函数的定义
指针
指针的作用:可以通过指针间距访问内存
1.内存编号从0开始记录的,一般就用十六进制数字表达
2.可以利用指针变量保存地址
定义指针: 数据类型 *指针变量名
int a = 10
int *p
// 让指针记录变量a的地址
p = &a
cout << "a的地址为:"<<&a<<endl
cout <<"指针p为:"<<p<<endl
使用指针:指针前面+*代表解引用,
*p = 100
使用指针
{
int a = 10
}
指针所占内存空间:
int *p
int a=10
int *p = &a
cout<<sizeof(p)
空指针和野指针
用途:初始化指针变量
:空指针指向的内存是不可以访问的
野指针:
int *p = NULL
{
int *p = NULL
野指针:在我们重新种避免出现野指针
int *p =
}
const修饰在指针:
const修饰指针:--常量指针
const int *p = &a :常量指针
特点:指针的指向可以修改,但是指针指向的值不可以改
int * const p = &a
特点:指针的指向不可以改,指针指向的值可以改
cont int * const p3=&a
指针和数组:
int arr[]={1,2,3,4,5,6,7,8,9,10}
int *p = arr
p++
指针和函数:
{
void swap(int a, int b){
int temp = a
a=b
b=temp
}
void swap02(int *p, int *p2){
int temp = *p
*p1=*p2
*p2=temp
}
int main(){
swap(a,b)
swap2(&a,&b)
return 0
}
}
指针,数组,函数
void bubleSort(int *arr,int len){
for(int i=0
for(int j
if(arr[j]>arr[j+1]){
int temp = arr[j]
arr[j]=arr[j+1]
arr[j+1]=temp
}
}
}
}
printArray(int *arr,int len){
for(int i=0
cout<<arr[i]<<endl
}
}
int main(){
//1.先创建数组
//2.打开函数,实现冒泡排序
//3.打印排序后的数组
int arr[10]={14,2,5,6,9,8,4,3,5,0}
int len=sizeof(arr)/sizeof(arr[0])
bubbleSort(arr,len)
}
结构体:
结构体属于以后自定义数据类型,允许存储不同的数据类型
语法:struct 结构体名 {结构体成员列表}
通过结构体创建变量的方式有三种:
1.struct 结构体名 变量名
2.struct 结构体名 变量名={成员1值,成员2值...}
3.定义结构体时顺便创建变量
注:结构体创建变量的时候可以省略struct 比如:结构体名 变量名
struct Student{
// 成员列表
string name
int age
int score
}
// 通过学生类型创建具体学生
1.struct Student s1
2.struct Student s2={"张三",18,80}
3.struct Student{
string name
int age
int score
}s3
结构体数组:结构体名 数组名[元素个数] = {{},{}...}
struct Student{
//姓名
string name
//年龄
int age
//分数
int score
}
struct Student stuArray[8]={
{"name1","age1","score1"},
{"name2","age2","score2"}
...
}
结构体指针:利用操作符号->可以通过结构指针访问结构体属性
{
struct Student{
string name
int age
int score
}
int main(){
//1.创建学生结构体变量
struct Student s = {"张三",18,100}
//2.通过指针指向结构体变量
struct Student *p = &s
//3.通过指针访问结构体变量中的数据
p->name
cout<<p->name<<endl
}
}
结构体嵌套结构体
// 老师的结构体
struct student{
string name
int age
int score
}
struct teacher{
int id
string name
int age
struct student stu
}
// 学生的结构体
int main(){
teacher t
t.id = 10000
t.name = "老王"
t.age = 50
t.stu.name = 20
}
// 结构体做函数参数:
值传递
struct student{
string name
int age
int score
}
void printStudent(struct student s){ // 值传递
cout <<s.name<<s.age<<endl
}
值传递:printStudent(s)
// 1.值传递 2.地址传递
void printStudent(struct student *p){ //类型就是struct 结构体名
cout<<p->name<<endl
}
printStudent(&s)
结构体中const使用场景:
结构体中const使用场景
struct student{
string name
int age
int score
}
void printStudents(const student *s){//将函数中的形成改成指针,可以减少内存空间,而且不会复制新的副本出来,加入const就不能修改就可以了常量指针
s->age = 150
cout <<"姓名:"<<s.name<<"年龄:"<<s.age<<endl
}
int main(){
struct student s = {"张三",15,70}
// 通过函数打印结构体变量的信息
printStudents(&s)
}
example:
结构体案例:
struct Student{
string sName
int score
}
struct Teacher{
string tName
// 学生数组
struct Student sArray[5]
}
void allocateSpace(struct Teacher tArray[]. int len){ // 传数组或者指针
string nameSeed = "ABCDE"
for(int i = 0
tArray[i].tName="Teacher_"
tArray[i].tName += nameSeed[i]
for(int j=0
tArray[i].sArray[j].sName = "Stdudent_"
tArray[i].sArray.sName += nameSeed[j]
}
}
}
int main(){
struct Teacher tArray[3]
int len=sizeof(tArray)/sizeof(tArray[0])
allocateSpace(tArray,len)
}
system("pause")
system("cls")