第一部分C++基础语法-创新互联

1. 初始 1.1 常量的设置
  • #define:宏常量的设置
  • const:修饰变量
1.2 标识符命名规则
  • 不是关键字
  • 下划线、字母、数字组成,数字不能在开头
  • 区分大小写,见名知意
1.3 科学计数法
  • 3e2:表示3*10^2
  • 3e-2:表示3*0.1^2
1.4 转义字符

\t:水平制表符,跳到下一个tab的位置,可用于多行输出对齐

创新互联建站-专业网站定制、快速模板网站建设、高性价比惠安网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式惠安网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖惠安地区。费用合理售后完善,十余年实体公司更值得信赖。1.5 随机数的设置
  • int a = rand()%(n-m+1) + m:产生随机数的范围[m,n]
    rand 函数产生的随机数是伪随机数,是根据一个数按照某个公式推算出来的,这个数我们称之为“种子”,但是这个种子在系统启动之后就是一个定值。要想每次产生的随机数不一样,那么,我们就要用到 srand 函数。
  • srand((unsigned int)time(NULL));
    种子,利用时间的不同产生不同的随机数
1.6 跳转语句
  • break:switch语句、跳出当前循环、跳出内层循环
  • continue:跳出本次循环,进入下一次循环
  • goto 标志:跳转到标记的位置
2. 数据类型

可利用sizeof()统计数据类型所占大小

2.1 整型
数据类型长度大小
short2字节2^±15
int4字节2^±31
long4字节2^±31
long long8字节2^±63
2.2 实型
数据类型长度大小
float(后加f)4字节7位有效数字
double8字节15~16位有效数字
2.3 字符型

char a=‘x’ 、1字节、单引号、一个字符
实际存储的为对应的ASCII码,‘a’=97、‘A’=65

2.4 字符串型
  • C风格:char str[]=“hello”,双引号
  • C++风格:string str=”hello”,需添加头文件#include
2.5 布尔类型

1个字节,ture——真——非0,false——假——0

3. 运算符 3.1 算术运算符

只有整数能够进行取模运算
++a/–a:先加减、再运算
a++/a–:先运算、再加减

3.2 赋值/比较/逻辑运算符

+=,-=,*=,/=,%=
==,!=,>=,<=,>,<
!、&&、||

4. 数组 4.1 一维定义
//三种不同的定义方式
int a[10];
int a[10]={1,2...10};
int a[]={1,2...10};
4.2 一维数组名

获取整个数组占用内存空间的大小
可以通过数组名到数组首地址

int arr[3]={1,2,3};
    cout<<"整个数组的长度:"<
4.3 例
  • 逆置元素
    双指针start、end,条件start>end
  • 冒泡
    第一层,个数-1;第二层,个数-轮数(i)-1
4.4 二维定义
//四种定义方式
int arr[2][3];
int arr[2][3]={1,2,3,4,5,6};
int arr[][3]={1,2,3,4,5,6};
int arr[2][3]=
{//推荐此方法,直观,提高代码的可读性
    {1,2,3},
    {4,5,6}
}
4.5 二维数组名

获取整个数组占用内存空间的大小
可以通过数组名到数组首地址

cout<<"整个数组所占空间的大小:"<
5. 指针

无论什么类型,都占4个字节(在win32位系统中)

5.1 定义与使用
//定义指针
int a=10;
int *p;
p=&a;//为指针赋值(地址)

//使用指针
*p;//解指针,指向内存中的数
5.2 空指针
  • 定义:指针变量指向内存中编号为0的空间
  • 用途:初始化指针变量int *p = NULL
  • 注意:空指针指向的内存是不能访问的(0~255为系统占用内存,不允许用户访问)
5.3 野指针
  • 指针变量指向非法的内存空间
  • int *p = (int *)0x1100
5.4 const修饰指针
  • const修饰指针——常量指针
    const int *p = &a
    指针的指向可以改,指针指向的值不可以改
  • const修饰常量——指针常量
    int * const p = &a
    指针的指向不可以改,指针指向的值可以改
  • const既修饰指针,又修饰常量
    const int * const p= &a
    指针的指向和指向的值都不能改
5.5 指针与数组、函数
  • 与数组
    int *p = arr//指向数组首地址
  • 函数
    int a=10,b=20;
    swap(&a,&b);
    
    void swap(int *p1.int *p2){int temp = *p1;
        *p1=*p2;
        *p2=temp;
    }
    p++;//函数的运算
6. 结构体 6.1 定义与使用

在定义时,不可以省略struct关键字;在使用时,可以省略struct关键字。

//定义结构体(以下皆以此为例)
struct Student{string name;
 int age;
}; 

//创建结构体变量,三种使用方法
struct Student s; s.name="000"; s.age=20;
struct Student s={"000",20}
在定义结构体后创建变量,随后赋初值
6.2 结构体与数组、指针
  • 与数组
    //创建数组变量
    struct Student s[2]{{"000",20};
        {"001",21};
    };
    
    //使用
    s[i].name
  • 与指针
    //创建指针变量
    Student s={"000",21};
    Student *p = &s;
    
    //使用
    p->name
6.3 值传递与地址传递

不修改主函数中的数据,使用值传递。修改主函数中的数据,使用地址传递

struct Student s;
void printf1(struct Student p){p.name…………}//值传递
printf1(s);

void printf2(struct Student *p){p->name…………}//地址传递
printf2(&s);

使用指针进行传递,可以减少内存空间,而且不会复制新的副本。
而使用const修饰结构体Student const *p能够防止误操作

7. 分文件 7.1 头文件

在头文件.h中,只有属性与行为函数的声明

//该文件名为test.h
#pragma once//防止头文件重复包含
#includeusing namespace std;

class P{public:
    void setX(int x);
    int getX();

private:
    int p_x;
}
7.2 源文件

在源文件.cpp中,只有行为函数所有的实现

#include "test.h"//包含头文件名

//此时为全局函数,需要加上作用域成为成员函数
void P::setX(int x){p_x=x;
}
int P::getX(){return p_x;
}
8.内存分区模型

四个区域,代码区、全局区、栈区、堆区
不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程
在程序编译后,会生成exe可执行程序
四个分区可分为程序执行前(代码区、全局区)与程序执行后(栈区、堆区)

8.1 代码区

存放函数体的二进制代码(CPU执行的机器指令),由操作系统进行管理

  • 共享的,对于频繁执行的程序,只需在内存中有一份代码即可
  • 只读的,防止程序意外修改了其中的指令
8.2 全局区

存放全局变量、静态变量、常量(字符串常量,const修饰全局变量)
该区域的数据在程序结束后由操作系统释放

8.3 栈区

由编译器自动分配释放,存放函数的参数值、局部变量等
不要返回局部变量的地址

8.4 堆区

由程序员分配(new)和释放(delete),若程序员不释放,程序结束时由操作系统回收

8.5 new操作符

在堆区创建数据,返回该数据对应类型的指针

  • 基本语法

    int * a = new int(10);//创建
    delete a;//释放
  • 开辟数组

    int * arr = new int [10];//创建
    delete[] arr;//释放
9. 引用 9.1 基本规则
  • 作用:给变量起别名(用不同的变量名操作同一块内存空间)

  • 语法:数据类型 &别名 = 原名

  • 注意:引用必须要初始化;初始化后不能再更改

  • 本质:是一个指针常量(指向不可改,值可改)

    int a=10;
    int &ref = a;//自动转换为`int * const ref = &a
    ref=20;//内部发现ref是引用,自动转换成*ref=20
9.2 引用传递

效果与地址传递相同,能够修改实参,简化了地址传递(指针的使用)

void swap(int &x,int &y){……;
}
//实际上为取别名,将a->x,b->y
swap(a,b);
9.3 返回值

引用可以作为函数的返回值存在

  • 不能返回局部变量的引用

    int& test(){int a=100;
        return a;
    }
  • 函数调用能够作为左值使用(如果函数做左值,则必须返回引用)

    int& test(){static int a=100;
        return a;
    }
    test()=1000;
9.4 常量引用

防止误操作,修改实参

int &ref=10;//错误,引用本身需要一个合法的内存空间
const int& ref =10;//正确,编译器自动优化代码
ref = 100;//错误,加入const后不可以修改变量


void show(const int& x){x=10;//不能够改变
}
10.函数高级 10.1 默认参数

int fun(int a=10,int b=20)形参中可以有默认参数

  • 若有传入数据,则用传入的数据;否则用默认值
  • 若某位置有参数,从这位置往后必须有默认值
  • 函数的声明中有默认值,函数的实现就不能有默认值
10.2 占位参数

void fun(int),只有数据类型

  • 调用时需要有参数调补该位置,可以有默认参数
10.3 函数重载

函数名相同,提高复用性

  • 条件
    • 同一个作用域
    • 函数名相同
    • 参数类型不同 or 个数不同 or 顺序不同(返回值类型不同不是条件)
  • 注意事项
    • 引用作为重载的条件

      //不同情况
      void fun(int &a){}  int a=10;fun(a);
      void fun(const int &a){}   fun(10);
    • 重载碰到默认参数
      会出现二义性

      void fun(int a,int b=10){}
      void fun(int a){};
      fun(10);//此时两个都可以调用,分不清
11.文件操作 11.1 前言
  • 程序运行时产生的数据属于临时数据,程序一旦运行结束都会被释放,而通过文件可以将数据持久化
  • 对文件的操作需包含头文件
  • 文件类型
    • 文本文件:以文本的ASCII码的形式存储
    • 二进制文件:以文本的二进制形式存储
  • 操作文件三大类
    • ofstream:写操作
    • ifstream:读操作
    • fstream:读写操作
11.2 文本文件
  • 写文件

    • 包含头文件:#include
    • 创建流对象:ofstream ofs;
    • 打开文件:ofs.open("文件路径",打开方式);
      没写绝对路径的话,生成在当前目录
    • 写数据:ofs<<"写入的数据";
    • 关闭文件:ofs.close();
  • 文件打开方式
    可以配合使用,利于|操作符

    打开方式解释
    ios::in为读文件而打开文件
    ios::out为写文件而打开文件
    ios::ate初始位置,文件尾
    ios::app追加方式写文件
    ios::trunc如果文件存在先删除,再创建
    ios::binary二进制方式
  • 读文件

    • 包含头文件:#include

    • 创建流对象:ifstream ifs;

    • 打开文件并判断是否成功打开:

      ifs.open("文件路径",打开方式);
      if(!ifs.is_open(){cout<<"文件打开失败"<

      没写绝对路径的话,生成在当前目录

    • 读数据:四种方式

    • 关闭文件:ifs.close();

  • 读数据的四种方式

    • 第一种

      char buf[1024] = {0};
      while(ifs>>buf){cout<
    • 第二种

      char buf[1024] = {0};
      while(ifs.getline(buf,sizeof(buf))){cout<
    • 第三种

      string buf;
      while(getline(ifs.buf)){cout<
    • 第四种(不推荐)

      char c;
      while( (c=ifs.get())!= EOF ){//EOF 表示end of file
          cout《《
      }
11.3 二进制的文本文件
  • 写文件

    • 包含头文件:#include

    • 创建流对象:ofstream ofs("文件路径",打开方式);

    • 打开文件(可省略):ofs.open("文件路径",打开方式);

    • 写文件

      //函数原型:ofstream& write(char *buffer,int len);
      Person p={"张三",18};
      ofs.write( (const char *)&p,sizeof(Person) );
    • 关闭文件
      ofs.close();

  • 读文件

    • 包含头文件:#include

    • 创建流对象:ifstream ifs;

    • 打开文件并判断是否成功打开

      ifs.open("a.txt",ios::in | ios::binary);
      if(!ifs.is_open()){cout<<"文件打开失败"<
    • 读文件

      Person p;
      ifs.read( (char *)&p,sizeof(Person) );
    • 关闭文件:ifs.close;

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:第一部分C++基础语法-创新互联
当前URL:http://ybzwz.com/article/psjso.html