【C++】C++学习笔记1:基本语法

前言

意识到Python和C++在一些数据处理方面有显著的不同,因此做一些学习记录。
上一期通过一些例子考虑了C++和Python的不同,这一期快速学习一下C++的基本语法。部分内容由GPT补充。

学习教程来源:https://www.runoob.com/cplusplus/cpp-tutorial.html

学习前的知识铺垫:对于计算机程序和计算机程序设计语言有基本的了解

C++简介

  1. C++可以被理解为带类的C。C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。
  2. C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。

标准库

  1. 核心语言。变量,数据类型,常量等等。
  2. 标准库。函数用于操作文件,字符串。
  3. 标准模板库STL

C++的在数据模拟方面的使用

科学计算和数值分析:C++ 可以用于开发科学计算和数值分析应用程序,如数值模拟和高性能计算等领域。由于这些应用程序需要高效的计算能力和对硬件的直接控制,C++ 语言是一个很好的选择。

  1. 科学计算 通常涉及到复杂的数学模型和数学问题求解,如微分方程、线性代数、优化问题等。
  2. 数值分析 是研究数学问题的数值解法,如数值积分、数值微分、方程求根等。
  3. C++ 被广泛用于开发需要进行大量计算的应用程序,如模拟物理现象的软件、天文数据分析、机器学习算法的实现等

C++环境设置

C++的语言环境需要两款可用软件:文本编辑器和C++编译器。通过编辑器创建的文件称为源文件,包含程序源代码。扩展名为.cpp,.cp,.c。编译器把人类可读的源文件中的源,转为机器可懂的机器语言。

C++基本语法

  1. 基本语法
  • 对象
  • 方法
  • 即时变量

C++程序结构

  • 头文件:包含程序中必须或者有用的信息
  • 命名空间: namesapace, python中没这个概念
  • 主函数
  • 返回值

C++的编译执行

  1. 在文本编辑器中添加想要运行的代码。
  2. 保存文件为.cpp结尾的形式
  3. 打开命令提示符,进入保存文件所在的目录
  4. g++编译代码,没错误命令提示符跳到下一行,生成.out可执行文件
  5. 输入.out来运行程序
  6. 看到结果

C++的分号&语句块

1,;分号为结束语
2.{} 语句块为大括号括起来的按逻辑连接的语句
3.C++可以在一行放置多个语句

C++标识符

一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
例子:mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal

C++ 中的空格

1.一部分是为了分割语句中的各个部分
2.一部分是为了增加可读性

C++注释

  1. // 单行注释
  2. /**/ 多行注释

数据类型

  1. 基本的内置类型
    一共有七种基本的C++数据类型。
类型关键字
字符型char
布尔型bool
整型int
浮点型float
双浮点型double
无类型void
宽字符型wchar_t

基本类型可以由一个或者多个类型修饰符进行修饰。修饰符:

  • signed
  • unsigned
  • short
  • long

数据所占用的字节数不同。类型转换能够将一个数据类型的值转换为另一种数据类型的值。

typedef声明

能够为一个已有的类取一个新名字。

C++变量类型

变量其实只不过是程序可操作的存储区的名称。
在这里插入图片描述

C++中的变量定义

格式:

int    i, j, k;
char   c, ch;
float  f, salary;
double d;
type variable_name = value;

C++变量作用域

名称特点
局部变量函数或一个代码块内部声明的变量。函数内,局部变量的值会覆盖全局变量的值
形式参数在函数参数的定义中声明的变量
全局变量在所有函数外部声明的变量

C++常量/修饰符类型

和Python差不太多,自己翻翻C++常量/修饰符就好,总结得很细致。

定义常量

两种定义方式。

  1. 使用#define预处理器。
#define identifier value
  1. 使用const关键字
const type variable = value;

C++储存类

名称描述
auto注:从 C++ 17 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用。声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。
register用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词)
static指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。
extern存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。
mutable仅适用于类的对象,允许对象的成员替代常量
thread_local使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。

C++运算符

名称描述
算术运算符就是做算术运算,加减乘除这样
关系运算符检查操作数之间的关系
逻辑运算符与或非
位运算符逐位进行操作,010101之间的变换
杂项运算符其他的运算符
注意,运算符有优先级,可对表查看。

C++循环

和Python差不多,while,for,do…while,嵌套,等等。
循环的控制,break,continue,goto,等等,也和Python差不多。

C++判断

和Python相似,if, if…else, 嵌套if,switch,嵌套switch
条件运算符可以用来替代if…else语句。

Exp1 ? Exp2 : Exp3;

C++函数

return_type function_name( parameter list )
{
   body of the function
}

返回类型,函数名称,参数,和函数主体。这部分也和Python大差不差。

函数的声明,C++中函数的声明和调用时分开的。

return_type function_name( parameter list );

Lambda 函数与表达式

Lambda函数即匿名函数,创建一个没有名字的函数。形式如下:

[capture](parameters)->return-type{body}

前面的方括号的作用:

[]      // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&]     // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=]     // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x]  // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。

C++数字

在要用到数字时,会使用原始的数据类型,如int、short、long、float 和 double。
生成随机数,需要的函数为rand()和srand(),使用rand()前要先使用srand()。

C++数组

声明数组的规范:

type arrayName [ arraySize ];

在这里插入图片描述

C++字符串

两种形式。

  1. C风格字符串
    字符串实际上是使用 null 字符 \0 终止的一维字符数组。
    在这里插入图片描述
  2. C++引入的string类型

C++指针

指针的作用是简化C++编程任务的执行,还有一些比如动态内存分配没有指针无法执行。
每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。
指针的定义格式:

type *var-name;

指针声明:

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;    /* 一个字符型的指针 */

例子:

#include <iostream>
 
using namespace std;
 
int main ()
{
   int  var = 20;   // 实际变量的声明
   int  *ip;        // 指针变量的声明
 
   ip = &var;       // 在指针变量中存储 var 的地址
 
   cout << "Value of var variable: ";
   cout << var << endl;
 
   // 输出在指针变量中存储的地址
   cout << "Address stored in ip variable: ";
   cout << ip << endl;
 
   // 访问指针中地址的值
   cout << "Value of *ip variable: ";
   cout << *ip << endl;
 
   return 0;
}

C++引用

把引用当成是变量附属在内存位置中的第二个标签。

例子:

int&  r = i;
double& s = d;
#include <iostream>
 
using namespace std;
 
int main ()
{
   // 声明简单的变量
   int    i;
   double d;
 
   // 声明引用变量
   int&    r = i;
   double& s = d;
   
   i = 5;
   cout << "Value of i : " << i << endl;
   cout << "Value of i reference : " << r  << endl;
 
   d = 11.7;
   cout << "Value of d : " << d << endl;
   cout << "Value of d reference : " << s  << endl;
   
   return 0;
}

C++ 的基本输入输出

  1. 输入操作:从设备(键盘,磁盘驱动器,网络连接)流向内存。
  2. 输出操作:从内存流向设备(显示屏,打印机,磁盘驱动器,网络连接)

C++数据结构

C/C++ 数组允许定义可存储相同类型数据项的变量,结构是 C++ 中另一种用户自定义的可用的数据类型,允许存储不同类型的数据项。

struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
type_name结构体类型的名称
member_type1 member_name1标准变量的定义

访问结构的成员使用成员访问运算符(.)

一个清晰的例子:

#include <iostream>
#include <cstring>
 
using namespace std;
 
// 声明一个结构体类型 Books 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main( )
{
   Books Book1;        // 定义结构体类型 Books 的变量 Book1
   Books Book2;        // 定义结构体类型 Books 的变量 Book2
 
   // Book1 详述
   strcpy( Book1.title, "C++ 教程");
   strcpy( Book1.author, "Runoob"); 
   strcpy( Book1.subject, "编程语言");
   Book1.book_id = 12345;
 
   // Book2 详述
   strcpy( Book2.title, "CSS 教程");
   strcpy( Book2.author, "Runoob");
   strcpy( Book2.subject, "前端技术");
   Book2.book_id = 12346;
 
   // 输出 Book1 信息
   cout << "第一本书标题 : " << Book1.title <<endl;
   cout << "第一本书作者 : " << Book1.author <<endl;
   cout << "第一本书类目 : " << Book1.subject <<endl;
   cout << "第一本书 ID : " << Book1.book_id <<endl;
 
   // 输出 Book2 信息
   cout << "第二本书标题 : " << Book2.title <<endl;
   cout << "第二本书作者 : " << Book2.author <<endl;
   cout << "第二本书类目 : " << Book2.subject <<endl;
   cout << "第二本书 ID : " << Book2.book_id <<endl;
 
   return 0;
}

使用指针:

结构:

struct Books *struct_pointer;

清晰代码:

#include <iostream>
#include <cstring>
 
using namespace std;
void printBook( struct Books *book );
 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main( )
{
   Books Book1;        // 定义结构体类型 Books 的变量 Book1
   Books Book2;        // 定义结构体类型 Books 的变量 Book2
 
    // Book1 详述
   strcpy( Book1.title, "C++ 教程");
   strcpy( Book1.author, "Runoob"); 
   strcpy( Book1.subject, "编程语言");
   Book1.book_id = 12345;
 
   // Book2 详述
   strcpy( Book2.title, "CSS 教程");
   strcpy( Book2.author, "Runoob");
   strcpy( Book2.subject, "前端技术");
   Book2.book_id = 12346;
 
   // 通过传 Book1 的地址来输出 Book1 信息
   printBook( &Book1 );
 
   // 通过传 Book2 的地址来输出 Book2 信息
   printBook( &Book2 );
 
   return 0;
}
// 该函数以结构指针作为参数
void printBook( struct Books *book )
{
   cout << "书标题  : " << book->title <<endl;
   cout << "书作者 : " << book->author <<endl;
   cout << "书类目 : " << book->subject <<endl;
   cout << "书 ID : " << book->book_id <<endl;
}
  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值