C++ 基础知识(1)

news2024/11/19 4:47:05

文章目录

  • 写在前面
  • 1、第一个c++程序
    • 1.1、输入输出及注释
    • 1.2、命名空间
  • 2、变量、数组、指针
    • 2.1、基本类型
    • 2.2、数组与字符串
    • 2.3、指针
    • 2.4、指针空值
    • 2.5、引用
  • 3、判断与循环
    • 3.1、if、else
    • 3.2、for、while
  • 4、函数与参数
    • 4.1、函数与缺省参数
    • 4.2、函数重载
    • 4.3、内联函数

写在前面

c++基本语法、用法。
参考文章:https://blog.csdn.net/chenlong_cxy/article/details/127166206

1、第一个c++程序

1.1、输入输出及注释

// 导入iostream输入输出流
#include<iostream>

// std命名空间是C++中标准库类型对象的命名空间
using namespace std;

int main(){
	int a;
	cin >> a;  
	cout<< a << endl;
}
  • 两个斜杠表示注释
  • include用来引入包含的文件,用" "双引号包含的一般是源文件相同路径下的文件,用< >包含的是stl或你所使用的第三方库等的文件
  • using namespace std 表示使用std标准空间
  • cin是输入
  • cout是输出,endl表示换行
#include<iostream>
using namespace std;

int main(){
	int a, b, c;
	scanf("%d-%d-%d", &a, &b, &c);
	
	printf("Hello, World!\n");
	printf("b is %d", b);
}
  • scanf 按照固定格式,固定类型输入
  • printf 按照固定格式,固定类型输出

在这里插入图片描述

1.2、命名空间

引用命名空间N的某个成员

//使用using将命名空间中的成员引入
#include <stdio.h>
namespace N
{
	int a;
	double b;
}

using N::a;//将命名空间中的成员a引入
int main()
{
	a = 10;//将命名空间中的成员a赋值为10
	printf("%d\n", a);//打印命名空间中的成员a
	return 0;
}

引用命名空间N的所有成员

//使用using namespace 命名空间名称引入
#include <stdio.h>
namespace N
{
    // 在命名空间中,既可以定义变量,也可以定义函数
	int a;
	double b;
	int Add(int x, int y)
	{
		return x + y;
	}
}

using namespace N;//将命名空间N的所有成员引入
int main()
{
	a = 10;
	printf("%d\n", a);
	return 0;
}

2、变量、数组、指针

2.1、基本类型

整型(int、short、long、long long)
浮点型(float、double)
字符型(char)
布尔型(bool)

2.2、数组与字符串

// 数组
int myArray[5] = {1, 2, 3, 4, 5};
// 字符串
char myString[] = "Hello, world!"; // 定义一个字符数组,包含字符串"Hello, world!"
const char* myConstantString = "Hello, world!"; // 定义一个常量指针,指向字符串"Hello, world!"(需要手动管理内存,在编译时确定其长度)
std::string myStringObj = "Hello, world!"; // 定义一个字符串对象,包含字符串"Hello, world!"(自动内存管理,可动态调整长度)

2.3、指针

指针就是变量的内存地址。

#include <iostream>
using namespace std;

int main() {
    int a = 10; // 定义变量a并赋值10
    int *p = &a; // 定义一个整型指针p,并将其指向a的内存地址
    // 重点:*p = &a 相当于把*p和a绑定,*p、a其中一个内存地址变化,另一个也会跟着变

    cout << "a的值:" << a << endl; // 输出a的值
    cout << "a的内存地址:" << &a << endl; // 输出a的内存地址
    cout << "p指向的值:" << *p << endl; // 输出p指向的值(即a的值)

    int b = 20; // 定义一个整型变量b并赋值为20
    *p = b; // 将p指向的值(即a)修改为b的值
    cout << "修改后的a的值:" << a << endl; // 输出修改后的a的值(即b的值)
    return 0;
}

注意:上面的p表示单纯的地址,而*p表示指向a的地址空间
如下代码,p = &b 不会改变a的值, *p = b 会改变a的值,

#include<iostream>
using namespace std;

int main(){
    int a = 10;
    int *p = &a;
    cout << "p:" << *p << endl; 

    int b = 20;
    
    p = &b; 
    cout << "a的值:" << a << endl; //  a = 10
    cout << "*p的值:" << *p << endl; // *p = 20

    return 0;
}

p = &b (地址变化)*p = b (仅数值变化) 执行后内存地址对比

在这里插入图片描述

2.4、指针空值

int* p1 = NULL;
int* p2 = 0;
int* p3 = nullptr; // p3指向空地址(c++11)

2.5、引用

#include <iostream>
using namespace std;

int main()
{
	int a = 10;
	int& b = a;//给变量a去了一个别名,叫b (引用在定义时必须初始化)
	cout << "a = " << a << endl;//a打印结果为10
	cout << "b = " << b << endl;//b打印结果也是10
	b = 20;//改变b也就是改变了a
	cout << "a = " << a << endl;//a打印结果为20
	cout << "b = " << b << endl;//b打印结果也是为20

	int c = 0;
	b = c;//这里并不会改变b的地址,只会改变b这个地址存储的值
	return 0;
}

常引用

int main()
{
	const int a = 10;
	//int& ra = a;    //该语句编译时会出错,a为常量
	const int& ra = a;//正确
	
	//int& b = 10;    //该语句编译时会出错,10为常量
	const int& b = 10;//正确
	return 0;
}

用指针写的交换函数

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

用引用写的交换函数

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

3、判断与循环

3.1、if、else

#include <iostream>
using namespace std;

int main() {

    int a = 10;

    if (a > 5) {
        cout << "a大于5" << endl;
    } else if (a > 3) {
        cout << "a在3到5之间" << endl;
    } else {
        cout << "a小于等于3" << endl;
    } 
    return 0;
}

3.2、for、while

c++98 for循环

	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		cout << arr[i] << " ";
	}

c++11 for循环

	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	//循环拿到引用
	for (auto& e : arr)
	{
		cout << e << " ";
	}
	//循环自动类型
	for (auto e : arr)
	{
		cout << e << " ";
	}

while 与 do while

    int j = 0;
    while (j < 10) {
        cout << "j的值为:" << j << endl;
        j++;
    }
    int k = 0;
    do {
        cout << "k的值为:" << k << endl;
        k++;
    } while (k < 10);

循环中可以使用break和continue跳过、结束循环。

4、函数与参数

4.1、函数与缺省参数

#include <iostream>
using namespace std;
void Print(int a = 0)
{
	cout << a << endl;
}
int main()
{
	Print();//没有指定实参,使用参数的默认值(打印0)
	Print(10);//指定了实参,使用指定的实参(打印10)
	return 0;
}

缺省参数(必须从右往左依次给出,不能间隔着给)

在这里插入图片描述

缺省值必须是常量或者全局变量。

//正确示例
int x = 30;//全局变量
void Print(int a, int b = 20, int c = x)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

4.2、函数重载

c语言中不支持函数重载,C++中支持

同名函数,形参不同

#include <iostream>
using namespace std;

int Add(int x, int y)
{
	return x + y;
}

double Add(double x, double y)
{
	return x + y;
}
int main()
{
	cout << Add(1, 2) << endl;//打印1+2的结果
	cout << Add(1.1, 2.2) << endl;//打印1.1+2.2的结果
	return 0;
}

4.3、内联函数

inline int add(int a, int b) {
    return a + b;
}


int main() {
    int x = 3;
    int y = 4;
    int sum = add(x, y);
    std::cout << "The sum is: " << sum << std::endl;
    return 0;
}

在这个例子中,add函数被定义为内联函数,因此在main函数中调用它时,它的代码会被直接插入到main函数中,而不是像普通函数那样通过函数调用。

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

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

相关文章

什么是云安全访问服务

云安全访问服务(Cloud Secure Access Service&#xff0c;CSAS)是一种网络安全服务&#xff0c;旨在保护云环境下的应用程序和数据。它提供了一种安全访问云应用程序和数据的方式&#xff0c;同时也可以保护云中的敏感信息不被未经授权的用户访问。CSAS包括多种安全功能&#x…

从程序员到架构师——缓存层场景

读缓存 业务场景 如何将十几秒的查询请求优化成毫秒级&#xff1f; 这次项目针对的系统是一个电商系统。每个电商系统都有个商品详情页。一开始这个页面很简单&#xff0c;只包括商品的图片、介绍、规格、评价等。 刚开始&#xff0c;这个页面打开很快&#xff0c;系统运行…

控制台里的神秘代码 \033[

“\033[”这串字符在控制台里有特殊的应用。 在串口工具里&#xff08;如sscom&#xff09;看着是一串字符。 在控制台里却可以改变字体颜色&#xff0c;显示进度条&#xff0c;甚至字符动画。 1 字体控制 #include <stdio.h>int main() {printf("以下是测试文字&…

MM 采购凭证的交货成本 表

如上图的交货成本表再 EKBZ表里面

9.1 I/O模型

目录 I/O基本概念 同步和异步 阻塞和非阻塞 五种I/O模型 五种I/O模型比较 I/O基本概念 I/O即数据的读取&#xff08;接收&#xff09;或写入&#xff08;发送&#xff09;操作 通常用户进程中的一个完整I/O分为两个阶段 用户进程空间<-->内核空间 内核空间<--&…

【GPT】中文通用大模型梳理与测评(C-Eval 、AGIEval、MMLU、SuperCLUE)

文章目录 概述申请后直接使用大模型开源可本地部署 通识数据集测评&#xff08;C-Eval 、AGIEval、MMLU、SuperCLUE&#xff09;自媒体报道SuperCLUE&#xff1a;中文通用大模型综合性基准C-Eval&#xff1a;中英测评&#xff08;清华上交提出&#xff09;当前排名&#xff08;…

【Unity编辑器扩展】(三)PSD转UGUI Prefab, 一键拼UI/同步字体/自动9宫切图(完结篇)

工具效果&#xff1a; 第一步&#xff0c;把psd图层转换为可编辑的节点树&#xff0c;并自动解析UI类型、自动绑定UI子元素&#xff1a; 第二步, 点击“生成UIForm"按钮生成UI预制体 (若有UI类型遗漏可在下拉菜单手动点选UI类型)&#xff1a; 验证一键生成UI效果: 书接上…

微信支付接口常用参数及证书区分

注意&#xff1a;服务商模式下&#xff0c;均是使用服务商的以下信息 1. 证书 1.1商户api证书&#xff08;v2和v3接口都需要使用&#xff09; 1.1.1获取方式&#xff1a; 什么是商户API证书&#xff1f;如何获取商户API证书&#xff1f; &#xff08;商户api证书 &#xff…

【Spring AOP】面向切面编程,面向切面编程是面向对象编程的孪生兄弟嘛?且听我细细道来! ! !

前言: 大家好,我是良辰丫,面向切面编程和面向对象编程是两种几乎不同的编程方式,并不是所谓的孪生兄弟,但是我们可以说面向切面编程是面向对象编程的一种补充和完善,到底是什么意思呢?请跟随良辰的步伐往下瞧! ! !&#x1f48c;&#x1f48c;&#x1f48c; &#x1f9d1;个人主…

机器学习7:特征工程

在传统的软件工程中&#xff0c;核心是代码&#xff0c;然而&#xff0c;在机器学习项目中&#xff0c;重点则是特征——也就是说&#xff0c;开发人员优化模型的方法之一是增加和改进其输入特征。很多时候&#xff0c;优化特征比优化模型带来的增益要大得多。 笔者曾经参与过一…

【初识 Docker | 中级篇】 Docker 中使用 docker-compose 安装 Nacos

文章目录 前言一、安装 docker1、安装docker2、安装docker-compose 二、Nacos 单机安装1.创建配置文件1.1.创建目录1.2.创建nacos-logback.xml1.3.创建application.properties1.4.创建docker-compose.yml 2.nacos数据库表结构3.启动Nacos容器 总结 前言 可以按照以下步骤在 Do…

Text2Video-Zero:Text-to-Image扩散模型是Zero-Shot视频生成器

Text2Video-Zero: Text-to-Image Diffusion Models are Zero-Shot Video Generators Paper: https://arxiv.org/abs/2303.13439 Project: https://github.com/Picsart-AI-Research/Text2Video-Zero 原文链接&#xff1a;Text2Video-Zero:Text-to-Image扩散模型是Zero-Shot视频…

Splashtop 让按需远程支持流程更加流畅

Splashtop 一直采用9位 SOS 会话码的形式为用户提供按需支持&#xff1a; 1、技术员引导最终用户访问网站 sos.splashtop.com&#xff1b; 2、最终用户下载并运行小程序&#xff0c;然后发送9位会话码给技术员。 自2015年 Splashtop SOS 产品推出以来&#xff0c;我们一直采…

PLC数字量与模拟量信号输入/输出接线

西门子S7-1200 具有用于进行计算和测量、闭环回路控制和运动控制的集成技术&#xff0c;是一个功能非常强大的系统&#xff0c;可以实现多种类型的自动化任务。下面分享S7-1200系列数字量与模拟量信号输入/输出接线图给大家。 数字量信号模块输入输出接线 SM 1221 数字量输入…

分布式机器学习(Parameter Server)

分布式机器学习中&#xff0c;参数服务器(Parameter Server)用于管理和共享模型参数&#xff0c;其基本思想是将模型参数存储在一个或多个中央服务器上&#xff0c;并通过网络将这些参数共享给参与训练的各个计算节点。每个计算节点可以从参数服务器中获取当前模型参数&#xf…

高速电路设计系列分享-信号链精度分析(下)

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 在任何设计中&#xff0c;信号链精度分析都可能是一项非常重要的任务&#xff0c;必须充分了解。之前&#xff0c; 我们讨论了在整个信号链累积起来并且最终会影响到转换器的多…

嵌入式软件测试笔记7 | 嵌入式软件测试中基于风险的测试策略如何开展?

7 | 嵌入式软件测试中基于风险的测试策略如何开展&#xff1f; 1 风险评估1.1 分析风险1.2 如何估计故障几率&#xff1f;1.3 导致故障几率较高的因素1.4 估计可能的损失1.5 风险评估的来源1.6 风险的处理 2 主测试计划中的策略2.1 目标2.2 制定策略的步骤2.3 选择质量特性2.4 …

美国签证办理需要户口本吗?

在申请美国签证时&#xff0c;有关所需文件的问题常常令人困惑。关于是否需要提供户口本&#xff0c;知识人网可以向您解释一下相关情况。 首先&#xff0c;需要明确的是&#xff0c;美国签证申请并不要求申请人提供户口本。美国领事馆和大使馆在签证申请过程中通常要求申请人提…

零知识证明(Sigma和Flat-shamir)

概述 定义&#xff1a;大概的定义就是prover可以向verifier证明自己给定的信息是大概率正确的&#xff0c;但是不泄露任何附加信息&#xff0c;包含信息本身。 举例 这里以一个比较经典的例子&#xff0c;即向红绿色盲&#xff08;无法区分红色和绿色&#xff0c;看红色和绿色…

基于RFID技术的并列式挤奶厅方案

随着现代农业的不断发展&#xff0c;RFID技术已经广泛应用于畜牧业生产中。在奶牛养殖领域&#xff0c;RFID技术可以帮助养殖场管理人员实现奶牛的精准管理&#xff0c;提高生产效率。本文将介绍一种基于RFID技术的并列式挤奶厅方案&#xff0c;该方案可以实现对每头奶牛的精准…