C++基础语法

目录

变量

常量

​编辑

关键字

sizeof

标志符命名规则

数据类型

整型

浮点型

字符型

字符串

布尔类型

输入输出

转义字符

运算符

算术运算符

赋值运算符

​编辑

比较运算符

逻辑运算符

程序流程结构

顺序结构

选择结构

三目运算符:

switch语句

循环结构

while

do while

for

跳转语句

break

continue

goto

数组

一维数组定义方法:

一维数组名:

二维数组定义方法:

二维数组名:

函数

函数的定义:

函数的调用:

值传递:

函数的常见样式: 

函数的声明:

函数的分文件编写:

指针

指针的定义与使用:

指针所占空间:

空指针和野指针:

空指针

野指针

const修饰指针

指针和数组:

指针和函数: 

结构体:

结构体的定义和使用

结构体数组

结构体指针

写在最后


变量

变量存在的意义是为了更加方便的操作内存。再次调用内存时就可以不用使用地址串,而是使用变量名。

int a = 10;
cout <<" a= "<< a <<endl;

常量

  • 宏常量(#define)

#include <iostream>
using namespace std;
#define Day 7

int main(){
  Day = 8;
  cout<<"一周有"<< Day <<"天"<<endl;
  system("pause");
}

 

  • const修饰的变量(不可修改)

报错,只分配给可变类型:

关键字

sizeof

用于统计数据类型的所占内存空间       

  

标志符命名规则

  1. 不能是关键字
  2. 可以使字母、下划线、数字
  3. 首字符只能是下划线、字母
  4. 命名是区分大小写的 

数据类型

数据类型存在的意义:给变量分配合适的内存空间(避免造成资源浪费)

  • 整型

  • 浮点型

值得注意的是,在没有主动设置的情况下,c++默认显示6位小数:

float f1 = 3.1415926;  //可以在后面加上一个f(float f1 = 3.1415926f)
double d1 = 3.1415926;
cout << "f1 = " << f1 << endl; 
cout << "d1 = " << d1 << endl;

科学计数法:

f1 = 3e2;  //300

f2 = 3e-2;   //0.03

字符型

  • 字符型变量需要用单引号括起(不能使用双引号)
  • 单引号中只能是一个字符(不能是一个字符串)
  • 每一个字符变量只占一个字节
  • 值得注意的是,字符型变量并非将字符放进内存,而是将字符对应ASCII编码存进

cout << (int)a << endl ;

字符串

  • C风格字符串

char 变量名[ ] = "字符串值"

char str1[ ] = "Hello World";
cout << "str1 = " << str1 << endl;

  • C++字符串

string str2 = "hello world"

cout << "str2 = " << str2 << endl;

注意要引用一下头文件:

#include <string> 

布尔类型

bool flag1 = true;
bool flag2 = false;
cout << flag1 << endl;
cout << flag2 << endl;

布尔数所占空间为一个字节,其本质就是1、0 

输入输出

int s;
cout << "请输入整数s的值:" << endl;
cin >> s;
cout << "s = " << s << endl;

转义字符

  • //

  • /n

  • /t        (一个/t是占8个位置)

运算符

  • 算术运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符

算术运算符

注意:

  • 取模运算时,除数不能为零
  • 两个小数不能做取模运算
  • 注意前置递增和后置递增的区别

赋值运算符

比较运算符

比较的结果返回的是布尔值(0、1),即布尔值。 

逻辑运算符

注意:

  • 在C++中。除了零都是真
  • &&(同真才为真)
  • ||(同假才为假)

程序流程结构

  • 顺序结构

  • 选择结构

if( 判断条件 )注意这里不要加分号,不然不管条件是否满足都会执行大括号中的程序

{

        执行程序

}

三目运算符:

int p = 1;
int q = 2;
int r;
r = p < q ? p : q;
cout << r << endl;

如果返回的是变量,该变量可以进行赋值:

int p = 1;
int q = 2;
int r = 3;
( p > q ? p : q ) = r;     //谁大输出谁,然后进行赋值
cout << p << endl;

switch语句

switch( 结果 ) {

        case 结果1:执行程序1;break;

        case 结果2:执行程序2;break;

        case 结果3:执行程序3;break;

}

  • 循环结构

while

do while

区别在于do while需要先执行一次循环语句,再进行第一次判断

for

for( 起始表达式;条件表达式;末尾循环体){

        循环语句;

}

跳转语句

break

作用是直接跳出整个循环体

使用时机:

  1. 出现在switch
  2. 出现在循环语句
  3. 出现在嵌套循环语句

continue

作用是跳过后面未执行的语句

goto

作用是从此处跳转到标记的位置

----

----

goto FLAG ;

----

----

FLAG :

----

不要轻易使用goto,容易造成程序阅读紊乱。

数组

一维数组定义方法:

  1. 数据类型  数组名[ 数组长度 ]
  2. 数据类型  数组名[ 数组长度 ] = { n1,n2,n3……}
  3. 数据类型  数组名[  ] = { n1,n2,n3……}

一维数组名:

  • 所占空间

sizeof(arr) ; //可求得数组所占空间

  • 数组首地址:

int a[ ] ;

cout << (int)a << endl ;

  • 第一个元素地址:

cout << (int)&a[0] <<endl ;

这里值得注意的是:有些电脑上直接将十六进制强制转换成十进制会报错

原因是,int类型是占4个字节,而c++中int类型数组地址是12位十进制数,所以int的四个字节是不够的,至少需要8个字节。所以解决方法是:在win中转成long long,或者linux中转成long。

二维数组定义方法:

  1. 数据类型 数组名[ 行数 ] [ 列数 ] =    //直接对每一个位置进行赋值
  2. 数据类型 数组名[ 行数 ] [ 列数 ] = { {数据1,数据2……} ,{数据3,数据4……} }
  3. 数据类型 数组名[ 行数 ] [ 列数 ] = {数据1,数据2,……}
  4. 数据类型 数组名[  ] [ 列数 ] = {数据1,数据2,……}

注意二维数组定义时可以省略行数,但不能省略列数。 

二维数组名:

  • 所占空间

sizeof( arr );  //arr是一个二位数组

sizeof( arr[ 0 ] );

sizeof( arr[ 0 ][ 0 ] );

  • 首地址

int a[ ][ ] ;

cout << (int)a << endl ;   //二维数组首地址

cout << (int)a[ 0 ]<< endl ;  //第一行的首地址

cout << (int)a[ 0 ][ 0 ]<< endl ;  //第一个元素的首地址

函数

将一段经常使用的代码进行封装,减少重复代码。

函数的定义:

  • 返回值类型
  • 函数名
  • 参数列表
  • 函数语句
  • 返回值表达式

函数的调用:

//定义一个函数

int add (int num1,num2) {

        int sum = num1 + num2;

        return sum;

}

//主函数

int main (){

        int a = 10;

        int b = 20;

        int r = add(a,b);

        cout << "c = " << c << endl;

        system("pause"); 

}

值传递:

函数中形参的改变不会影响函数外实参的值!

本质是因为实参通过函数的形参传入时,会重新开辟地址!所以函数中是对新地址进行操作!

函数的常见样式: 

  • 无参无返
  • 无参有返
  • 有参无返
  • 有参有返

函数的声明:

当将函数具体实现写在主函数后面时,就需要先进行函数的声明。

注意:声明可以有很多次,但定义只能有一次!!!

函数的分文件编写:

  1. 创建 .h 的头文件
  2. 创建 .cpp 的源文件
  3. 头文件中写函数的申明
  4. 源文件中写函数的定义

指针

通过指针来保存一个地址,更简单的说,指针就是地址。

指针的定义与使用:

//数据类型  *  指针变量名;

int a = 10;

int *p;

p = &a;

cout << &a << endl;   //这两条语句输出是一样的打印的是地址

cout << p <<endl;

 可以通过解引用的方式,简介访问指针所指向的内存:

//接上

*p = 100;

cout << a << endl;   //这两条语句输出是一样的,打印的是变化后的值100

cout << *p <<endl;

指针所占空间:

在32位操作系统下,任何类型指针所占空间为4个字节,64为操作系统下占8个字节。

 

空指针和野指针:

空指针

  • 内存中编号为零的空间
  • 用于初始化指针
  • !!!空指针这块内存虽然存在,但不可访问

对于第三点:空指针这块空间是真实存在的,但没有权限访问。 

没有语法错误,能够被编译,但是运行后:

退出代码 -1073741819 (0xC0000005) 通常表示一个程序试图访问它没有权限访问的内存区域,这通常被称为"访问违规"(Access Violation)或"段错误"(Segmentation Fault)。

野指针

  • 指向了非法空间        

const修饰指针

  • 指针的指向可以修改
  • 指针指向的值不能修改

代码第28行,是对指针的解引用,报错。而29行是修改指针的指向,没报错。报错原因是:无法将值赋给只读类型。 

总结:

  • 常量指针---const int *p  //可修改指向,不可修改指针指向的值
  • 指针常量---int * const p  //可修改指向的值,不可修改指针指向
  • const int * const p  //两者都不可修改

指针和数组:

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

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

int *p;

p = arr;

cout << *p << endl;  //访问第一个元素

p++;

cout  << *p << endl;  //指针向后移动一个,指向了数组中第二个元素

指针和函数: 

地址传递

这里的重点是理解为什么,地址传递可以改变实参的数据

简单来说,就是地址传递是通过地址进行参数的访问,而值传递是开辟另外的空间进行操作。

结构体:

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

结构体的定义和使用

基本语法:struct + 结构体名 + { 成员列表 }

//结构体变量的创建

  • struct + 结构体名 + 变量名;  //变量名.属性
  • struct + 结构体名 + 变量名 = { 属性值列表 };
  • 在定义结构体时顺便创建变量

结构体数组

基本语法:struct + 结构体名 + 数组名[ 元素个数 ] = { {属性列表1} ,{属性列表2},…… };

结构体指针

写在最后

本文是关于c++最基本知识的总结,适用有C语言基础的学习者,知识点比较简单,但还算比较全面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值