C++基础语法一

1.C++初识

1.1.初学必备头文件代码
  • #include<iostream>  //输入输出流头文件
  • using namespace std;

#include "xx.h"  //表示自定义的头文件   

在自定义头文件中,会看到一行灰色代码   #pragma once 防止头文件重复包含

1.2.定义常量的两种方式
  •  #define 宏常量    如:  #define Day 7
  • const 修饰的变量  如: const int month = 12; 
1.3.标识符命名规则
  • 标识符不能是关键字
  • 标识符由字母,数字,下划线组成
  • 第一个字符为字母或者下划线
  • 标识符中字母区分大小写

2.数据类型

2.1.利用sizeof关键字统计数据类型所占内存的大小   sizeof(数据类型 / 变量)
2.2.整型所占字节数大小比较:

short(2字节) < int(4字节) <= long(window下4字节,linux下8字节) <= long long(8字节)

各类取值范围为:-2^(字节数*8-1)~ (2^(字节数*8-1))-1  (正值取值减一的原因为减去0)

2.3.浮点型(单精度:float   双精度:doubl e)

float占4个字节,有效数字范围为7位(小数点前后一共7位)

double占8个字节,有效数字范围为15~16位

注:默认情况下,输出一个小数,会显示6位有效数字

2.4.科学计数法

float f1 = 3e2  // 表示 3*10^2

float f1 = 3e-2  // 表示 3*0.1^2

2.5.字符型
  • 用于显示单个变量    语法: char ch = 'a';
  • 只能用单引号括起来,不能用双引号,单引号内只能有一个字符
  • 占1个字节
  • 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放到存储单元中
  • 输出字符对应的ASCII编码: cout << (int)ch <<endl;  利用强制转换变为int型
  • 常见对应ASCII码: a - 97     A - 65      0 - 48
2.6.转义字符

C++中的换行操作为 endl,表示换行

换行符 \n         反斜杠 \\          水平制表符  \t 

2.7.字符串型

C风格字符串   char 变量名[ ] = “字符串值”;

C++风格字符串   string  变量名 = “字符串值”;

2.8.bool数据类型

true  真(本质是1)                      false  假(本质是0)

bool类型占1个字节大小

2.9.数据的输入和输出

数据的输出: cout << 变量;       cout << 变量 << endl;    endl代表换行

数据的输入:cin >> 变量;

3.运算符

运算符分为算术运算符,赋值运算符,比较运算符,逻辑运算符

3.1.算数运算符

+  -  *  /(结果为小数,会将小数部分去除)  正号  负号  %(取余)  ++(前置递增与后置递增)   --(前置递减与后置递减)

%:除数不可以为0;两个小数是不可以做取模运算的(C++规定)

前置递增 ++     a = 2, b = ++a;      结果为:a = 3, b = 3;

后置递增 ++     a = 2, b = a++;      结果为:a = 3, b = 2;

前置递减 --     a = 2, b = --a;      结果为:a = 1, b = 1;

后置递增 --     a = 2, b = a--;      结果为:a = 1, b = 2;

3.2.赋值运算符

=    +=   -=   *=   /=  %=               

如:a += 2表示 a = a + 2;

3.3.比较运算符

==   !=   <   >   <=   >=

3.4.逻辑运算符

!(取反)    &&(与  两真则为真,其余为假)   ||(两假则为假,其余为真)

在C++中,除了0都为真     如: a=10,则 !a 的输出为0(假)

4.程序流程结构

4.1.顺序结构

按顺序执行

4.2.选择结构
4.2.1.if语句

if (条件) {执行语句}

if (条件) {执行语句} else {执行语句}

if (条件) {执行语句} else if {执行语句} else if {执行语句}...else{执行语句}

嵌套if 语句

4.2.2.三目运算符

语法: 表达式1 ?表达式2  :表达式3

解释:若表达式1的值为真,则执行表达式2,并返回表达式2的结果;若表达式1的值为假,则执行表达式3,并返回表达式3的结果;

在C++中,三目运算符返回的是变量,可以继续赋值

4.2.3. switch语句

语法:

switch(表达式){

case 结果1:执行语句;break;

case 结果2:执行语句;break;

......

default:执行语句;break;

}

switch的缺点:switch语句中表达式类型只能是整型或者字符型,不可以是一个区间

switch的优点:结构清晰,执行效率高

4.3.循环结构
4.3.1. while循环语句

语法:while(循环条件){循环语句;}

生成随机数的代码:

(1) 头文件中添加  #include<ctime>

(2) main函数中写入   

srand((unsigned int) time(NULL)); 

int number = rand()%100 + 1;  //生成1~100之间的随机数

4.3.2. do-while循环语句

语法:do{循环语句;}while(循环条件);

4.3.3. for循环语句

语法:for(起始表达式;条件表达式;末尾表达式){循环语句;

4.4.跳转语句
4.4.1 break语句
  • 在switch语句中,作用是终止case并跳出switch
  • 在循环语句中,作用是跳出当前的循环语句
  • 在嵌套循环中,作用是跳出最近的内层循环语句
4.4.2 continue语句

在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

4.4.3 goto语句

语法:goto 标记;

解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置

5.数组

  • 数组中每个数据元素都是相同的数据类型
  • 数组是由连续的内存位置组成的
5.1.一维数组
5.1.1.一维数组定义方式
  • 数据类型  数组名[数组长度];
  • 数据类型  数组名[数组长度] = {值1,值2,值3...};
  • 数据类型  数组名[ ] = {值1,值2,值3...};

数组元素的下标是从0开始索引的

数组名是常量,不可以进行赋值操作

5.1.2.一维数组名称的用途
  • 可以统计整个数组在内存中的长度
  • 可以获取数组在内存中的首地址
#include<iostream>
using namespace std;


int main() {
    
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	cout << "数组占用的内存空间为:" << endl;
	cout << sizeof(arr) << endl;

	cout << "数组中每个元素占用的内存空间为:" << endl;
	cout << sizeof(arr[0]) << endl;

	cout << "数组中元素的个数为:" << endl;
	cout << sizeof(arr) / sizeof(arr[0]) << endl;

	cout << "数组的首地址为(16进制):" << endl;
	cout << arr << endl;

	cout << "数组中第一个元素的地址为:" << endl;
	cout << &arr[0] << endl;

	system("pause");
	return 0;
}
5.2.二维数组
5.2.1.二维数组定义方式
  • 数据类型  数组名 [行数][列数]
  • 数据类型  数组名 [行数][列数] = {{数据1,数据2},{数据3,数据4}};
  • 数据类型  数组名 [行数][列数] = {数据1,数据2,数据3,数据4};
  • 数据类型  数组名 [ ][列数] = {数据1,数据2,数据3,数据4};
5.2.2.二维数组名称

int arr[2][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

二维数组第一行首地址:arr[0]

二维数组第二行首地址:arr[1]

二维数组第一个元素首地址:&arr[0][0]

6.函数

定义语法:返回值类型  函数名(参数列表){ 函数体语句; return 表达式;}

调用函数:函数名(参数)

值传递:函数调用时实参将数值传入给形参;值传递时,如果形参发生改变,并不会影响实参

函数的常见样式:无参无返     有参无返    无参有返    有参有返

函数的声明可以多次,但是函数的定义只能有一次

函数的分文件编写步骤:

  • 创建后缀名为.h的头文件(如 swap.h)
  • 创建后缀名为.cpp的源文件(swap.cpp,并在该源文件中引用头文件  #include "swap.h")
  • 在头文件中写函数的声明
  • 在源文件中写函数的定义

7.指针

7.1.指针的定义

指针的作用:可以通过指针间接访问内存

语法: 数据类型 * 指针变量名;

指针前加 * 代表解引用,表示找到指针指向的内存中的数据

int a = 10;    int * p = &a;

指针也是种数据类型,在32位操作系统下,占用4个字节空间,64位操作系统下占用8个字节空间(不管什么数据类型,如int float double等)

7.2.空指针和野指针
7.2.1.空指针

空指针:指针变量指向内存中编号为0的空间

用途:初始化指针变量

注意:空指针指向的内存是不可以访问的

空指针定义: int * p = NULL;

内存编号0~255为系统占用内存,不允许用户访问

7.2.2.野指针

野指针:指针变量指向非法的内存空间

7.3.const修饰指针
  • const修饰指针——常量指针
  • const修饰常量——指针常量
  • const即修饰指针,又修饰常量

例:int a = 10;  int b = 10;  int * p = &a;

若 const int * p = &a;  常量指针

常量指针特点:指针的指向可以修改,但指针指向的值不可以改。

例如: *p = 20;错误,不可以改指向的值

            p = &b; 正确,指针指向可以修改

若 int * const p = &a; 指针常量

指针常量特点:指针的指向不可以改,指针指向的值可以改。

例如: *p = 20;正确 可以修改指向的值

            p = &b;错误 不可以修改指针的指向

若 const int * const p = &a; const即修饰指针,又修饰常量

特点:指针的指向和指针指向的值都不可以改

例如: *p = 20;错误      p = &b; 错误

7.4.指针和数组

利用指针访问数组中的元素:

int arr[5] = {1,2,3,4,5};

int * p = arr;

则指针访问数组中第一个元素为 *p;    进行p++操作后,第二个元素则为*p

7.5.指针和函数

利用指针做函数参数,可以修改实参的值

8.结构体

8.1.结构体的定义

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

语法: struct  结构体名 { 结构体成员列表 };

通过结构体创建变量的方式有三种

  • struct 结构体名 变量名
  • struct 结构体名 变量名 = {成员1值,成员2值...}
  • 定义结构体是顺便创建变量

创建案例:

struct Student

{

        string name;

        int age;

        double score;

}

struct Student stu1; //创建变量时struct关键字可以省略    即 Student stu1;

stu1.name=" das "; ...

8.2.结构体数组

语法: struct  结构体名  数组名[元素个数] = { {},{},...,{} }

8.3.结构体指针

作用:通过指针访问结构体中的成员

利用操作符 -> 可以通过结构体指针访问结构体属性

struct Student * p = &stu1;

p -> name = " aas";

8.4.结构体嵌套结构体

struct teacher

{

        string name1;

        struct Student stu2;

}

调用学生属性时: teacher t;  t.stu2.name;

8.5.结构体做函数参数

将结构体作为参数向函数中传递,有值传递和地址传递两种方式

如打印结构体中的数据:值传递: void print (struct Student stu) { }

                                       地址传递: void print (struct Student * stu) { }

8.6.结构体中const使用场景

作用:用const来防止误操作

 如 : 地址传递: void print (const struct Student * stu) { } //加入const之后,一旦有修改的操作就会报错,可以防止我们的误操作

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值