c++基础版

news2024/9/20 18:44:09

c++基础版

  • Windows环境搭建
  • 第一个C++程序
  • c++程序运行原理
  • 注释
  • 常亮
    • 字面常亮
    • 符号常亮
  • 变量
  • 数据类型
    • 整型
    • 实型
    • 常量类型确定
    • char类型
    • 字符串
    • 布尔类型
  • 控制台输入
  • 随机数产生
  • 枚举定义
  • 数组
    • 数组便利
  • 指针基础
    • 野指针
    • 空指针
    • 指针运算
    • 动态内存分配
  • 结构体
    • 结构体默认值
    • 结构体数组
    • 结构体指针
    • 结构体指针数组
    • 函数
    • 无返回值函数和void类型
    • 地址传递
    • 函数传递数组
  • 引用
    • 函数引用传参
    • 返回指针的正确写法
    • 函数返回数组

Windows环境搭建

傻瓜式安装,点击零基础安装CLion

第一个C++程序

#include <iostream>

int main(int argc, char *argv[]) {
    std::cout << "Hello World!" << std::endl;
    return 0;
}

c++程序运行原理

代码->编译->程序
编译:将c++代码的文本,编译为计算机的可执行程序(.exe)
进行翻译的动作,需要一个工具,称之为:编译器

可执行C++代码编译工作的编译器有很多,课程选择:mingw

安装 mingw
在这里插入图片描述
path环境变量配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cpp文件手动编译运行
g++ c1.cpp -o hello.exe
在这里插入图片描述

注释

单行注释
//开头
多行注释

/**
 * 这是main函数
 * @return
 */
int main() {
	cout<<"C++ Programming"<<"is Best language"<<endl;
    return 0;
}

常亮

在程序执行过程中值不会改变的量

常亮
字面常亮
符号常亮

字面常亮

被写到代码内的常量,又称为字面量

int main() {
    10;
    "HELLOWORLD";
    'A';
    return 0;
}

符号常亮

使用标识符去定义的常量

宏命令:#define 标识符 常量值

#include <iostream>
using namespace std;
#define FAT_BMI 28
#define J2C_RATE 4.19

/**
 * 这是main函数
 * @return
 */
int main() {
    cout <<  FAT_BMI << endl;
    cout << "焦耳转卡路里"<< " " << J2C_RATE << endl;
    return 0;
}

中文乱码问题
方案1:引入windows.h

#include <iostream>
#include <windows.h>
using namespace std;
#define FAT_BMI 28
#define J2C_RATE 4.19

/**
 * 这是main函数
 * @return
 */
int main() {
    // 设置UTF8编码
    SetConsoleOutputCP(CP_UTF8);

    cout << "BMI " << FAT_BMI << endl;
    cout << "焦耳转卡路里" << " " << J2C_RATE << endl;
    return 0;
}

方案2:system(“chcp 65001”);

#include <iostream>
 using namespace std;
#define FAT_BMI 28
#define J2C_RATE 4.19

/**
 * 这是main函数
 * @return
 */
int main() {
    // 只需要加入一句
    system("chcp 65001");

    cout << "BMI " << FAT_BMI << endl;
    cout << "焦耳转卡路里" << " " << J2C_RATE << endl;
    return 0;
}

变量

变量的声明和赋值
声明:int num;
赋值:num = 10;

#include <iostream>
using namespace std;

/**
 * 这是main函数
 * @return
 */
int main() {
    // 只需要加入一句
    system("chcp 65001");

    string name = "小明";
    int age = 21;
    float height = 180;
    char sex = 'm';
    cout << name<< "今年"
    << age << "岁,"
    << height << "身高,"
    << sex << "性别,"
    << endl;
    return 0;
}

快速声明赋值 int a = 1,b = 2,c = 3;

数据类型

整型

数据类型占用空间
short2字节
int4字节
longWindows为4字节,Linux为4字节(32位),8字节(64位)
long long8字节
#include <iostream>
using namespace std;

/**
 * 这是main函数
 * @return
 */
int main() {
    system("chcp 65001");

    short n1 = 2;
    int n2 = 3;
    long n3 = 4;
    long long n4 = 5;

    cout << "short 字节 "<< sizeof(n1) << endl;
    cout << "int 字节 "<< sizeof(n2) << endl;
    cout << "long 字节 "<< sizeof(n3) << endl;
    cout << "long long 字节 "<< sizeof(n4) << endl;

    return 0;
}

默认是有符号的 signed,无符号添加 unsigned

在这里插入图片描述

实型

数据类型占用空间
flat2字节
double8字节
long double16字节

全部都是有符号的

常量类型确定

在这里插入图片描述
在这里插入图片描述

char类型

在这里插入图片描述

字符串

在这里插入图片描述

字符串拼接
使用+,+只用于连接字符串类型

#include <iostream>
using namespace std;

/**
 * 这是main函数
 * @return
 */
int main() {
    system("chcp 65001");

    string major = "物理";
    int clazz = 1;
    string name = "小黑";

    cout << "我叫做" << name << " ,来自于" << major << to_string(clazz) << "班" << endl;
    return 0;
}

布尔类型

bool : true(等价于1),false(等价于0)

控制台输入

#include <iostream>
using namespace std;
 
int main() {
    system("chcp 65001");
    string name;
    cout << "Enter your name: ";
    cin >> name;
    cout << "name : " << name << endl;
    return 0;
}

在这里插入图片描述
此方式的中文输入和输出都会正常

随机数产生

#include <iostream>
#include <random>
using namespace std;

/**
 * 生成随机数
 * @param min
 * @param max
 * @return
 */
int getRandomNumber(int min, int max) {
    // 创建一个随机数生成器
    random_device rd;
    mt19937 gen(rd());

    // 定义一个均匀分布的整数范围
    uniform_int_distribution<> dis(min, max);

    // 生成一个随机数并输出
    int random_num = dis(gen);
    return random_num;

}

int main() {
    int num = getRandomNumber(1,10);
    cout << num << endl;
    return 0;
}

枚举定义

enum Season {
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER
};

数组

由一批相同类型的元素组成的集合
定义 数据类型 数组名[数组长度]

特点:

  • 越界不会报错
  • 内存连续且有序

数组便利

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

指针基础

特定类型数据在内存中的存储地址
64位操作系统,指针占用8个字节
在这里插入图片描述
在这里插入图片描述

野指针

被声明但未初始化(赋值)的指针

空指针

为了避免野指针,将指针赋值为空
int *p = NULL
int *p = nullptr

  • NULL是C++内置的宏,表示空的含义,其本质是0
  • nullptr是C++11标准引入的关键字,表示指针为空

上述,二选一即可

空指针也不是什么光荣的是,只在需要指针 但需要延迟赋值的场景下作为过度使用,不然声明也没有意义

指针运算

int main() {
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int *arr_ptr = &arr[0];
    int *arr_ptr1 = &arr[1];
    cout << *(++arr_ptr) << endl;
    cout << *arr_ptr1 << endl;
    return 0;
}

动态内存分配

在这里插入图片描述
在这里插入图片描述
非new指针是交由c++自动管理的,只有new出来的指针才是自己可以管理(delete)的
只有new 出来的指针才可以 delete

结构体

是一种用户自定义复合数据类型,可以包含不同类型的不同成员


struct Student {
    string name;
    int age;
    string gender;
};


int main() {
    Student student = {
        "John",
        13,
        "Marvine"
    };
    cout << student.name << endl;
    return 0;
}

结构体默认值

struct Student {
    string name = "hello";
    int age = 18;
    string gender = "male";
};


int main() {
    Student student = {"John"};
    cout << student.name << endl;
    cout << student.age << endl;
    return 0;
}

结构体数组


int main() {
    Student s1 = {"h1", 18, "male"};
    Student s2 = {"h2", 18, "male"};
    Student stus[3] = {s1, s2};

    for (auto stu : stus) {
        cout << stu.name << endl;
    }
    return 0;
}

结构体指针

int main() {
    Student s1 = {"h1", 18, "male"};
    Student *s1_ptr = &s1;
    cout << s1.name << endl;

    Student *s2 = new Student{"h2", 18, "male"};
    cout << s2->name << endl;

delete s2;
    return 0;
}

结构体指针数组

在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9a3567ed272449bdb19bfbe1f88498b5.png)

函数

一个提前封装好的、可重复使用的、完成特定功能的独立代码单元

#include <iostream>
#include <random>
using namespace std;

/**
 * 生成随机数
 * @param min
 * @param max
 * @return
 */
int getRandomNumber(int min, int max) {
    // 创建一个随机数生成器
    random_device rd;
    mt19937 gen(rd());

    // 定义一个均匀分布的整数范围
    uniform_int_distribution<> dis(min, max);

    // 生成一个随机数并输出
    int random_num = dis(gen);
    return random_num;
}

无返回值函数和void类型

在这里插入图片描述

地址传递

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

函数传递数组

在这里插入图片描述

引用

某个已存在的变量的别名
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

函数引用传参

在这里插入图片描述


void swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}

int main() {
    int a = 1, b = 2;
    cout << a << " " << b << endl;
    swap(&a, &b);
    cout << a << " " << b << endl;

    return 0;
}

引用是为了更方便的修改值
在这里插入图片描述

返回指针的正确写法

在这里插入图片描述


int * add(int a ,int b ) {
    int * result = new int;
    *result = a + b;
    return result;
}

int main() {
    int a = 1, b = 2;
    int* result = add(a, b);
    cout << *result << endl;
    delete result;
    return 0;
}


函数内如果要返回指针,必须在函数内new空间,并返回指针,然后记得销毁delete

函数返回数组

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb笔记整理13——Mybatis

目录 Mybatis介绍 删除 预编译SQL SQL注入 新增 更新 查询 数据封装 条件查询 XML映射文件 动态SQL 更新案例 foreach Mybatis介绍 删除 预编译SQL SQL注入 新增 更新 查询 数据封装 条件查询 XML映射文件 动态SQL <if> 更新案例<set> foreach &l…

消息中间件 --Kafka

一、 Kafka 1.kafka介绍 Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。 生产者发送消息&#xff0c;多个消费者只能有一个消费者接收到消息 生产者发送消息&#xff0c;多个消费者都可以接收到消息 producer&#xff1a;发布消息的对象称之为主题生产者…

人工智能,语音识别也算一种人工智能。

现在挺晚了&#xff0c;还是没有去睡觉&#xff0c;自己在想什么呢&#xff0c;也不确定。 这是一篇用语音写的文章&#xff0c;先按自己的想法说出来&#xff0c;然后再适当修改&#xff0c;也许就是一个不错的文章。 看来以后就不需要打字了&#xff0c;语音识别度很高&#…

两数之和--力扣1

两数之和 题目思路C代码 题目 思路 根据题目要求&#xff0c;元素不能重复且不需要排序&#xff0c;我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中&#xff0c;使用目标值减去当前循环的nums[i]&#xff0c;得到差值&#xff0c;如果我们…

ICM20948 DMP代码详解(8)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;7&#xff09; 上一回讲解了EMP-App中的入口函数main()中重点关注的第2段代码的后一个函数inv_icm20948_register_aux_compass&#xff0c;讲解了其各个参数&#xff0c;本回对于函数代码进行解析。为了便于理解和回顾…

市场独宠大尺寸超微小间距LED显示屏COB智能会议一体机

在当今这个信息化高速发展的时代&#xff0c;大屏幕显示设备已成为企业会议、教育培训、展览展示、商业广告等多个领域不可或缺的重要工具。随着技术的不断进步&#xff0c;市场上涌现出了投影机、液晶一体机、DLP背投、小间距LED、LED会议一体机以及新兴的COB智能会议一体机等…

vulhub Thinkphp5 2-rce远程代码执行漏洞

步骤一&#xff1a; 执行以下命令启动靶场环境并在浏览器访问 cd /vulhub/thinkphp/2-rce #进入漏洞环境所在目录docker-compose up -d #启动靶场docker ps #查看容器信息 步骤二&#xff1a;访问网页 步骤三&#xff1a;?s/Index/index/L/${phpinfo()} 步骤四&#xff1a;?…

828华为云征文 | 搭建云服务器Flexus X实例,开启简单上云第一步

828华为云征文 | 搭建云服务器Flexus X实例&#xff0c;开启简单上云第一步 Flexus云服务器X实例是一个高度可扩展的云平台&#xff0c;提供了一系列的服务&#xff0c;包括数据处理、应用开发、服务器托管等&#xff1b;对于开发者来说&#xff0c;Flexus云服务器X实例提供了一…

Percona 开源监控方案 PMM 详解

文章目录 前言1. 安装部署1.1 Server 安装1.2 Client 安装 2. 监控数据库2.1 MySQL2.2 PostgreSQL 3. Dashboard 介绍总结 前言 Percona Monitoring and Management (PMM) 是 Percona 公司基于业界流行的组件 Prometheus 和 Grafana 设计开发的一体化数据库监控解决方案。本篇…

vulhub ThinPHP5 2-rce远程代码执行漏洞

1.打开环境 进入环境所在的文件 docker-compose up -d 一键启动 2.浏览器访问环境 3.构造payload ?s/index/index/L/${phpinfo()} 4.写入一句话木马 ?s/Index/index/name/${print(eval($_POST[cmd]))} 5.使用蚁剑连接 http://192.168.10.233:8080/?s/Index/index/name…

SpringMVC基于注解使用:国际化

01-国际化介绍 首先在bootstrap下载个页面 下载后把登录页面的代码粘上去 然后再登录页面代码上有些超链接需要再spring-mvc.xml里面配置下&#xff0c;登录页面才能正常显示 配置静态资源 国际化-根据浏览器语言国际化 现在是中文的情况&#xff0c;要改为英文 1.配置下属…

秒懂:进程优先级

1.概念 简单来说&#xff0c;进程优先级是对于资源访问顺序来说的&#xff0c;谁先访问资源&#xff0c;谁的优先级就高。 注意&#xff1a;这和权限概念不一样&#xff0c;权限是能不能访问。 2.情景引入 进程的运行&#xff0c;是在CPU上执行&#xff0c;每次执行只能执行CP…

JavaWeb【day09】--(Mybatis)

1. Mybatis基础操作 学习完mybatis入门后&#xff0c;我们继续学习mybatis基础操作。 1.1 需求 需求说明&#xff1a; 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求&#xff0c;完成员工管理的需求开发。 通过分析以上的页面原型和需求&#xff0c;我们确定了…

寒冬下,你不知道的赛道!

见字如面&#xff0c;技术人雄起&#xff01; 现在的环境怎样没有比技术人更有体会的了吧&#xff0c;但是我也不禁要问&#xff0c;还有那些赛道过的不错&#xff0c;还有谁在挣钱。因为能量是守恒的&#xff0c;西边不亮东边亮。真巧还真让我找到一些。 中药 2023年中国中药…

文件名管理器,一款免费的文件名管理工具,支持文件整理功能

文件名管理器是一款可以批量修改文件名的工具&#xff0c;但是相较于其他工具又有不同。除了批量重命名功能外&#xff0c;软件同时提供一些特色功能&#xff1a;把文件名插入到文本文件中、根据文件名写入音乐ID3信息&#xff0c;整理下载的视频资源、音乐分类整理等。软件提供…

大圣也得靠AI?深扒《黑神话:悟空》后的AI技术!

要说最近爆火刷屏的顶流热词&#xff0c;非《黑神话&#xff1a;悟空》莫属。 图片来源&#xff1a;新华社 《黑神话&#xff1a;悟空》游戏背景设定在一个宏大而神秘的神话宇宙中&#xff0c;融合了古代中国的神话传说与虚构的奇幻元素&#xff0c;构建了一个绚丽多彩的开放世…

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMes…

Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result=22, HTTP code = 404

Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result22, HTTP code 404 在学习共享库时使用通过git拉取jenkinsfile时&#xff0c;报错在排查gitlab服务状态&#xff0c;网络通讯&#xff0c;防火墙规则以及Jenkins凭据均可以正常使用&#xff0c;最后发现的…

HTB-Tactics(Impacket工具集合 和 smb特殊共享)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解Tactics靶机 渗透过程 信息搜集 服务器开启了smb协议 连接smb服务器 Admin$ 对应的是 C:\Windows 目录,是 Windows 自动创建的共享,主要用于执行一些与系统管理相关的操作&#xff0c;例如远程文件管…

Spring Boot3.x 启动自动执行sql脚本

1 引言 某些项目在首次启动时&#xff0c;需要先手动创建数据库表&#xff0c;然后再手动写入初始数据才能正常使用。为了省去这个手动操作过程&#xff0c;我们可以使用Spring Boot启动时执行sql脚本的配置&#xff0c;全自动完成这个过程。 2 配置 具体配置如下&#xff1…