2 进入C++

目录

1 进入C++

  1.1 C++注释

  1.2 C++预处理指令#include

   1.3 头文件名

  1.4 语句与分号

  1.5 main()函数

2 常用语句

2.1 申明语句

2.2 赋值语句

2.3 cout语句

2.4 cin语句


1 进入C++

  1.1 C++注释

       C++ 中的注释是用来给代码添加说明或解释,这些注释对于编译器来说是不可见的,即编译器会忽略它们。C++ 支持两种类型的注释:

       1.单行注释:以两个正斜杠 // 开始,直到行尾的所有内容都被视为注释

//单行注释
int a=0;//在该行中编译器仅翻译双斜杠(//)前面的代码

       2.多行注释(也称为块注释):以 /* 开始,以 */ 结束,这两个标记之间的所有内容都被视为注释。多行注释可以跨越多行。

/* 这是一个  
   多行注释  
   可以跨越多行 */  
int b = 10;  
  
/*   
你也可以在注释中  
包含 // 这样的单行注释标记  
但它不会影响实际的注释范围  
*/

注意

  • 多行注释可以嵌套单行注释,但多行注释内部不能嵌套另一个多行注释。尝试这样做会导致编译错误,因为编译器无法找到正确的 */ 来结束内层的多行注释。

  • 注释是编写清晰、可维护代码的重要工具。合理使用注释可以帮助其他开发者(或未来的你)更快地理解代码的目的和工作方式。然而,过度使用注释或注释不恰当的地方可能会使代码更难阅读。

  • 在一些情况下,为了代码的清晰性,可能更倾向于使用自文档化的代码(即代码本身足够清晰,不需要额外的注释)

  1.2 C++预处理指令#include

       在C++中,#include预处理指令用于在编译之前将另一个文件的内容插入到当前文件中。这个指令告诉预处理器在继续处理之前,首先找到指定的文件,并将其全部内容复制到#include指令所在的位置。这样做的主要目的是为了实现代码的复用和模块化。

  #include指令有两种形式:

  1. 使用尖括号<>:这通常用于包含标准库头文件或编译器自带的头文件。编译器会在标准库路径中查找这些文件。例如:

    #include<iostream>

    这行代码会包含C++标准库中的输入输出流库,使得程序可以使用std::coutstd::cin等对象。

  2. 使用双引号"":这通常用于包含用户自定义的头文件或特定于项目的头文件。编译器会首先在当前文件所在的目录查找这些文件,如果找不到,则会在标准库路径中查找。但是,具体的查找顺序可能依赖于编译器和项目的配置。例如:

    #include "myheader.h"

         这行代码会尝试包含当前项目中的一个名为myheader.h的头文件。

   #include指令的一个重要特性是它可以嵌套,即一个被包含的文件中还可以包含其他文件。但是,为了避免无限递归包含和编译时间过长的问题,大多数编译器都会限制包含文件的最大深度或检测并避免重复包含同一个文件。

扩展

        为了避免头文件被重复包含,通常会在头文件的开始和结束处添加预处理宏来检查该头文件是否已经被包含过。这通常被称为“包含卫士”(Include Guards)或“头文件保护”(Header Guards)。例如:

// myheader.h  
#ifndef MYHEADER_H  
#define MYHEADER_H  
  
// 头文件的内容  
  
#endif // MYHEADER_H

       在这个例子中,#ifndef#define#endif预处理指令一起工作,确保myheader.h的内容只会在第一次被包含时插入到源文件中。如果MYHEADER_H宏已经定义(即该头文件已经被包含过),则#ifndef条件为假,整个#ifndef#endif之间的内容都会被预处理器忽略。

   1.3 头文件名

       在C或C++等编程语言中,头文件(Header File)通常包含了一系列的声明(如函数声明、宏定义、类型定义等),这些声明用于告诉编译器如何正确编译其他源文件中的代码。头文件名没有固定的规则,但通常会遵循一些通用的命名约定和最佳实践。

        以下是一些关于头文件名的常见约定:

  1. 前缀
    • C标准库中的头文件,其前缀通常不含或只有极少的特定前缀(如<stdio.h><stdlib.h>等)。
    • C++标准库中的头文件,C风格的(C-style)通常前缀为c(如<cstdio><cstdlib>),而C++风格的(C++-style)则通常不包含c前缀(如<iostream><vector>等)。
  2. 扩展名
    • C/C++的传统做法是使用.h作为头文件的扩展名(如mylib.h)。
    • C++的新实践中,尤其是在使用C++标准库风格的头文件时,建议使用不带.h扩展名的形式(如<iostream><vector>),这些实际上是头文件路径中的目录名而非传统意义上的文件扩展名。但用户自定义的头文件通常仍然保留.h扩展名,或为了明确表示其C++风格,可以使用.hpp作为扩展名(如mylib.hpp)。
  3. 命名风格
    • 头文件名应清晰表达其内容或用途。例如,如果一个头文件包含了数学运算函数的声明,可以命名为math_operations.hmath_operations.hpp
    • 避免使用过长或过短的名称,以便在代码中易于理解和识别。
    • 对于库或项目的内部头文件,可以在文件名中包含库名或项目名作为前缀,以减少命名冲突的可能性(如mylib_math_operations.h)。
  4. 包含保护(Include Guards)
    • 为了防止头文件被重复包含(多重包含),通常会在头文件的开始和结束处使用宏定义来作为包含保护(Include Guards)或称为预处理指令(Preprocessor Directives)。这是防止编译错误的一种常见做法。

       综上,头文件名的选择应根据项目、库的命名风格、编码规范以及个人或团队的偏好来决定。不过,遵循一定的命名约定和最佳实践将有助于提高代码的可读性和可维护性。

  1.4 语句与分号

       在C++中,语句是程序的基本构建块,用于执行指令。一个语句通常以分号(;)结束,这标志着该语句的结束和下一个语句的开始。分号是C++(以及C、Java、JavaScript等多种编程语言)中用于分隔语句的符号。

语句的类型

C++中的语句可以是多种类型,包括但不限于:

  1. 表达式语句:一个表达式后跟一个分号。例如,x = 5; 是一个赋值表达式语句,它将值5赋给变量x。

  2. 声明语句:用于声明变量、函数等。虽然变量声明本身不以分号结束(因为类型名和变量名之间需要其他符号分隔),但如果在声明时同时初始化变量,则整个声明和初始化构成一个表达式语句,并以分号结束。例如,int x = 5;

  3. 控制流语句:用于控制程序的流程,如条件语句(ifswitch)、循环语句(forwhiledo-while)等。这些语句内部可以包含多个子语句,但每个子语句仍然需要以分号结束(如果它们是表达式语句的话)。

  4. 复合语句(也称为块):由一对花括号{}包围的语句序列。复合语句通常用作控制流语句(如iffor等)的主体,或者用于定义局部变量的作用域。复合语句内部的每个语句都必须以分号结束。

注意事项

  • 分号在C++中非常关键,缺少分号可能会导致编译错误,因为编译器会将缺少分号的语句与下一行合并为一个语句,而这往往不是程序员的本意。

  • 声明语句本身(如果不包含初始化表达式)不以分号结束,但如果声明了多个变量,则每个变量名后(除了最后一个)都需要逗号分隔,最后一个变量名后不需要逗号,但整个声明语句的末尾需要分号。

  • 空语句是一个仅包含单个分号的语句,它什么也不做。空语句可以用于语法上需要语句但逻辑上不需要执行任何操作的情况。例如,在for循环中,如果循环体什么都不做,可以仅写一个分号。

在这个例子中,你可以看到不同类型的语句以及它们是如何通过分号来分隔的。

  1.5 main()函数

       在 C 和 C++ 中,main() 函数是程序执行的起点。它返回一个整数(int),通常用来表示程序的退出状态。0 通常表示成功,而非零值表示出现了某种错误或异常情况。

#include<iostream>//使用了iostream头文件
using namespace std;//直接使用标准库的操作

int main() {
	cout << "hello,world!";//cout输出函数,输出hello,world!
	return 0;//返回值为0
}

      现在你就写会了C++里面的第一个代码“hello,world!”。

      然后我们将main()函数去掉修饰,显示其基本结构如下:

      int main()

      {

        statements(语句)

        return 0;

       }

          

       在C++中,main()函数是程序的入口点,其定义包含了两大部分:函数头和函数体。第一行int main()被称为函数头,它总结了函数与程序其他部分之间的接口,表明该函数没有参数,并且返回一个整型(int)值。紧跟在函数头后面的部分,由一对花括号{}包围,称为函数体,它包含了指出函数应执行哪些操作的计算机指令。

       函数头int main()中的int指定了函数的返回类型,即该函数执行完毕后将返回一个整数值给操作系统,通常用于表示程序的退出状态。main()函数名遵循C++的命名习惯,表示这是主函数。

       函数体内部包含了一系列指令,这些指令在程序运行时被逐一执行。在C++中,每条完整的指令都被称为语句,并且所有的语句都以分号(;)结束。因此,在编写或输入示例代码时,请确保不要省略语句末尾的分号。

   main()函数中的最后一条语句通常是一个返回语句,形式为return 0;。这条语句的作用是结束函数的执行,并将返回值0返回给操作系统。返回值0通常表示程序成功执行结束,而非0值可能表示发生了某种错误或异常情况。

        总结来说,main()函数通过其函数头和函数体定义了程序的执行入口和流程,而函数体内的语句则详细说明了程序应执行的具体操作。语句以分号结尾,是C++表达指令完整性的重要标志。

2 常用语句

2.1 申明语句

         首先,我们要明白计算机是一种精确的,有条理的机器。要将信息存储在计算机中,就必须要表明信息的存储位置以及所需的内存空间,而这种表示就是申明语句。

        申明语句有很多种,这里我们先讲一讲变量申明。

        变量声明告诉编译器变量的类型以及它的名称。例如:

int a;  // 声明了一个整型变量a  
double b; // 声明了一个双精度浮点型变量b

        在这里面int和double表示数据类型。

        在C++(以及C和其他许多编程语言中),变量在使用之前必须声明。变量声明是告诉编译器变量的类型以及它的名称的过程。这有助于编译器在编译时检查类型错误,并确保程序在运行时能够正确地访问和操作变量的内存位置。

变量声明通常包括以下信息:

  1. 类型:指定了变量可以存储的数据的类型,如int(整型)、float(浮点型)、char(字符型)等。

  2. 名称(或标识符):是变量的唯一名称,用于在程序中引用它。

  3. (可选)初始化:在声明变量时,可以为其分配一个初始值。这不是声明所必需的,但在许多情况下是一个好习惯,因为它可以避免使用未初始化的变量,这可能会导致不可预测的行为。

2.2 赋值语句

        在C++中,赋值语句用于将值或表达式的结果赋给变量。赋值操作使用赋值运算符=,它将右侧表达式的结果存储到左侧的变量中。(C++中的等于是两个等号==)

        赋值语句的基本形式如下:

variable = expression;

         这里,variable是已经声明的变量,而expression是一个表达式,其结果将被赋值给variable。表达式可以是常量、变量、函数调用、算术表达式等。

2.3 cout语句

   cout 是 C++ 中用于标准输出的流对象,它属于 <iostream> 库。使用 cout 可以向控制台(通常是命令行界面)输出文本、数字或其他类型的数据。它是 ostream 类的一个实例,因此继承了 ostream 类的所有功能,包括插入操作符 <<,这个操作符用于将数据发送到 cout

基本用法

以下是一些使用 cout 语句的基本示例:

  1. 输出文本

    #include <iostream>  
    using namespace std;  
    
    int main() {  
        cout << "Hello, World!" << endl;  
        return 0;  
    }

    这里,cout << "Hello, World!" 发送字符串 "Hello, World!" 到标准输出,endl 是一个操纵符,用于在输出后插入换行符,并刷新输出缓冲区。

  2. 输出数字

    #include <iostream>  
    using namespace std;  
    
    int main() {  
        int number = 27;  
        cout << "The answer is " << number << endl;  
        return 0;  
    }


    这里,cout 用于输出字符串 "The answer is " 和变量 number 的值,两者通过 << 操作符连接。

  3. 输出多种类型的数据

    cout 可以很容易地用于输出不同类型的数据,包括浮点数、字符等。

    #include <iostream>  
    using namespace std;  
    
    int main() {  
        int age = 30;  
        float weight = 70.5f;  
        char gender = 'M';  
    
        cout << "Age: " << age << ", Weight: " << weight << ", Gender: " << gender << endl;  
        return 0;  
    }

    注意事项

  • 在使用 cout 之前,需要包含 <iostream> 头文件。
  • using namespace std; 不是必需的,但它可以使代码更简洁,因为你可以直接使用 cout 而不是 std::cout。然而,在生产级代码中,为了避免命名冲突,通常建议显式使用 std:: 前缀。
  • endl 除了添加换行符外,还会刷新输出缓冲区,这可能会影响性能。如果不需要立即看到输出,可以使用 '\n' 代替 endl
  • 默认情况下,cout 关联的是标准输出流(通常是控制台或命令行界面)。但是,C++ 允许将 cout(以及其他 I/O 流)重定向到文件或其他流。

2.4 cin语句

   cin 是 C++ 中用于标准输入的流对象,它同样属于 <iostream> 库。使用 cin 可以从标准输入(通常是键盘)读取数据,并将其存储到程序中定义的变量中。cin 是 istream 类的一个实例,因此继承了 istream 类的所有功能,包括提取操作符 >>,这个操作符用于从 cin 读取数据。

基本用法

以下是一些使用 cin 语句的基本示例:

  1. 读取整数

    #include <iostream>  
    using namespace std;  
    
    int main() {  
        int number;  
        cout << "Enter a number: ";  
        cin >> number;  
        cout << "You entered: " << number << endl;  
        return 0;  
    }
    在这个例子中,cin >> number;语句从标准输入中读取一个整数,并将其存储在变量number中。
    
  2. 读取浮点数

    #include <iostream>  
    using namespace std;  
    
    int main() {  
        float pi;  
        cout << "Enter the value of pi: ";  
        cin >> pi;  
        cout << "You entered: " << pi << endl;  
        return 0;  
    }


    类似于整数,cin 也可以用来读取浮点数,并将其存储在相应的变量中。

  3. 读取字符串

           对于字符串,你需要使用 getline() 函数(而不是 >> 操作符)来读取整行输入,因为 >> 操作符在遇到空格、制表符或换行符时会停止读取。

    #include <iostream>  
    #include <string> // 注意需要包含 string 头文件  
    using namespace std;  
    
    int main() {  
        string name;  
        cout << "Enter your name: ";  
        getline(cin, name); // 使用 getline 而不是 cin >> name  
        cout << "Hello, " << name << "!" << endl;  
        return 0;  
    }


    在这个例子中,getline(cin, name); 语句从标准输入读取一行文本,并将其存储在字符串 name 中。

注意事项

  • 在使用 cin 之前,需要包含 <iostream> 头文件。
  • 如果你的输入包括空格(比如读取字符串时),应该使用 getline() 而不是 >> 操作符。
  • cin 在读取输入时,如果遇到无法转换为请求类型的数据(例如,尝试将非数字字符读入整数变量),它会进入错误状态,并停止进一步读取输入。你可以使用 cin.clear() 来重置其状态,并使用 cin.ignore() 来忽略错误输入后的字符,从而恢复 cin 的正常读取功能。
  • 默认情况下,cin 关联的是标准输入流(通常是键盘)。但是,C++ 同样允许将 cin(以及其他 I/O 流)重定向到文件或其他输入源。

C++中,可以使用不同的方式将数组传递到函数中。以下是几种常见的方法: 1. 传递数组的指针: 可以将数组作为指针传递给函数,这是最简单的方式。函数接收一个指针参数,指向数组的第一个元素。 示例代码: ```cpp void printArray(int* arr, int size) { for (int i = 0; i < size; i++) { std::cout << arr[i] << " "; } std::cout << std::endl; } int main() { int myArray[] = {1, 2, 3, 4, 5}; printArray(myArray, 5); return 0; } ``` 2. 传递数组的引用: 将数组作为引用传递给函数,这样在函数内部对数组的任何修改都会反映到原数组上。 示例代码: ```cpp void modifyArray(int (&arr)[5]) { for (int& elem : arr) { elem *= 2; } } int main() { int myArray[] = {1, 2, 3, 4, 5}; modifyArray(myArray); for (int elem : myArray) { std::cout << elem << " "; } std::cout << std::endl; return 0; } ``` 3. 传递数组的大小: 当只传递数组的指针时,通常还需要传递数组的大小,以确保函数内部不会访问数组界限之外的内存。 4. 使用模板: 可以使用模板函数来传递不同大小的数组。 示例代码: ```cpp template <size_t N> void printTemplateArray(int (&arr)[N]) { for (int elem : arr) { std::cout << elem << " "; } std::cout << std::endl; } int main() { int myArray[] = {1, 2, 3, 4, 5}; printTemplateArray(myArray); return 0; } ``` 5. 使用C++标准库容器: C++标准库中的容器,如std::vector,提供了更安全的数组操作方式,并且可以直接在函数参数中使用。 示例代码: ```cpp void printVector(const std::vector<int>& vec) { for (int elem : vec) { std::cout << elem << " "; } std::cout << std::endl; } int main() { std::vector<int> myVector = {1, 2, 3, 4, 5}; printVector(myVector); return 0; } ``` 选择适合的方法取决于你的具体需求,比如是否需要修改数组,是否知道数组大小等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值