C++ 基础入门

news2025/7/18 6:01:35

1、变量

        作用给一段指定的内存空间起名,方便操作这段内存。

2、常量

        作用:用于记录程序中不可更改的数据

         C++中定义常量的两种方式:

  1. #define 宏常量: #define 常量名 常量值
  2. const修饰的变量:const数据类型  常量名 = 常量值   
//1、宏常量
#define day 7

int main() {

	cout << "一周里总共有 " << day << " 天" << endl;
	//day = 8;  //报错,宏常量不可以修改

	//2、const修饰变量
	const int month = 12;
	cout << "一年里总共有 " << month << " 个月份" << endl;
	//month = 24; //报错,常量是不可以修改的!(const修饰的变量也称为常量)
	
	system("pause");

	return 0;
}

3、数据类型

        C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存。

3.1 整型

        C++能够表示整形的数据类型有以下几种方式,区别在于所占内存空间不同

数据类型占用空间取值范围
short2字节(-2^15 ~ 2^15-1)
int4字节(-2^31 ~ 2^31-1)
longWindows为4字节,Linux为4字节(32位),8字节(64位)(-2^31 ~ 2^31-1)
long long8字节(-2^63 ~ 2^63-1)

3.2 浮点型

        作用用于表示小数

        浮点型变量分为两种:

  1. 单精度:float
  2. 双精度:double

        单精度和双精度区别在于表示的有效数字范围不同

数据类型占用空间取值范围
float4字节7位有效数据
double8字节15~16位有效数字

3.3  字符型

        作用:字符型变量用于显示单个字符

        语法:char ch = 'a';

  • C和C++中字符型变量只占用1个字节
  • 字符型变量并不是把字符本身放在内存总存储,而是将对应的ASCII编码放入到存储单元

注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号

注意2:单引号内只能有一个字符,不可以是字符串

3.4 sizeof关键字

        作用:利用sizeof关键字可以统计数据类型所占内存空间大小

        语法:sizeof( 数据类型 | 变量 )

int main()
{
    // 整形
    short num1 = 10;
    int num2 = 10;
    long num3 = 10;
    long long num4 = 10;

    cout << "short所占内存空间大小" << sizeof(short) << endl;
    cout << "num1所占内存空间大小" << sizeof(num1) << endl;

    cout << "int所占内存空间大小" << sizeof(int) << endl;
    cout << "num2所占内存空间大小" << sizeof(num2) << endl;

    cout << "long所占内存空间大小" << sizeof(long) << endl;
    cout << "num3所占内存空间大小" << sizeof(num3) << endl;

    cout << "long long所占内存空间大小" << sizeof(long long) << endl;
    cout << "num4所占内存空间大小" << sizeof(num4) << endl;

    // 实数
    float f1 = 3.14f;
    double d1 = 3.14;

    cout << "float  sizeof = " << sizeof(f1) << endl;
    cout << "double sizeof = " << sizeof(d1) << endl;

    // 字符型
    char ch = 'a';
    cout << ch << endl;
    cout << "char sizeof ="<<sizeof(char) << endl;
}

3.5 字符串型

        作用:用于表示一串字符;

        两种风格的字符串表示形式:

                1. C风格字符串:char 变量名[] = "字符串值"

int main()
{
	char str1[] = "wangy";
	cout << str1 << endl;

	system("pause");
	return 0;
}

                2. C++风格字符串:string 变量名 = "字符串值"

#include <string>
using namespace std;
int main()
{
    string str1 = "wangy";
	cout << str1 << endl;

	system("pause");
	return 0;
}	

 4、数组

        所谓数组,就是一个集合,里面存放了相同类型的数据元素。数组具有如下两个特点:

特点1:数组中的每个数据元素都是相同的数据类型

特点2:数组是由连续的内存位置组成的(因此数组可以下标访问)

 4.1 一维数组

 数组定义:

        数组定义时,必须给定数据类型及长度!

  1. 数据类型  数组名[数组长度];
    	//定义方式1
    	//数据类型 数组名[元素个数];
    	int score[10];
    	//利用下标赋值
    	score[0] = 100;
    	score[1] = 99;
    	score[2] = 85;
  2. 数据类型  数组名[数据长度]  =  {值1, 值2……};
    	//第二种定义方式
    	//数据类型 数组名[元素个数] =  {值1,值2 ,值3 ...};
    	//如果{}内不足10个数据,剩余数据用0补全
    	int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };
    	//一个一个输出太麻烦,因此可以利用循环进行输出
    	for (int i = 0; i < 10; i++)
    	{
    		cout << score2[i] << endl;
    	}
  3. 数据类型  数组名[ ] =  {值1, 值2……};
    	//定义方式3
    	//数据类型 数组名[] =  {值1,值2 ,值3 ...};
    	int score3[] = { 100,90,80,70,60,50,40,30,20,10 };
    
    	for (int i = 0; i < 10; i++)
    	{
    		cout << score3[i] << endl;
    	}

4.2 一维数组中的数组名

一维数组名称的用途:

  1. 可以统计整个数组在内存中的长度
  2. 可以获取数组在内存中的首地址
int main() {

	//数组名用途
	//1、可以获取整个数组占用内存空间大小
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

	cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;
	cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;
	cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;

	//2、可以通过数组名获取到数组首地址
	cout << "数组首地址为: " << (int)arr << endl;
	cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl;
	cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl;

	//arr = 100; 错误,数组名是常量,因此不可以赋值

	system("pause");

	return 0;
}
int main()
{
	int a[] = { 10,20,30 };

	int len = sizeof(a) / sizeof(a[0]);
	cout<<len<<endl;
	for (int i = 0; i < len; i++) {
		cout << a[i] << endl;
	}

	cout << a << endl;
	for (int i = 0; i < len; i++) {
		cout << &a[i] << endl;
	}
	system("pause");
	return 0;
}

 4.3 二维数组

二维数组定义的四种方式:

  1. 数据类型 数组名[ 行数 ][ 列数 ];
  2. 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
  3. 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
  4. 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};

建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性

int main() {
	//方式1  
	//数组类型 数组名 [行数][列数]
	int arr[2][3];
	arr[0][0] = 1;
	arr[0][1] = 2;
	arr[0][2] = 3;
	arr[1][0] = 4;
	arr[1][1] = 5;
	arr[1][2] = 6;
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}

	//方式2 
	//数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };
	int arr2[2][3] =
	{
		{1,2,3},
		{4,5,6}
	};

	//方式3
	//数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4  };
	int arr3[2][3] = { 1,2,3,4,5,6 }; 

	//方式4 
	//数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4  };
	int arr4[][3] = { 1,2,3,4,5,6 };
	
	system("pause");
	return 0;
}

4.4 二维数组数组名

  • 查看二维数组所占内存空间
  • 获取二维数组首地址
int main() {
	//二维数组数组名
	int arr[2][3] =
	{
		{1,2,3},
		{4,5,6}
	};

	cout << "二维数组大小: " << sizeof(arr) << endl;
	cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;
	cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;

	cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;
	cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;

	//地址
	cout << "二维数组首地址:" << arr << endl;
	cout << "二维数组第一行地址:" << arr[0] << endl;
	cout << "二维数组第二行地址:" << arr[1] << endl;

	cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;
	cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;

	system("pause");

	return 0;
}

5、函数

        作用将一段经常使用的代码封装起来,减少重复代码

        一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能

//函数定义
int add(int num1, int num2)
{
	int sum = num1 + num2;
	return sum;
}
//函数定义
int add(int num1, int num2) //定义中的num1,num2称为形式参数,简称形参
{
	int sum = num1 + num2;
	return sum;
}

int main() {

	int a = 10;
	int b = 10;
	//调用add函数
	int sum = add(a, b);//调用时的a,b称为实际参数,简称实参
	cout << "sum = " << sum << endl;

	a = 100;
	b = 100;

	sum = add(a, b);
	cout << "sum = " << sum << endl;

	system("pause");

	return 0;
}

函数定义里小括号内称为形参,函数调用时传入的参数称为实参

5.1 值传递

  • 所谓值传递,就是函数调用时实参将数值传入给形参
  • 值传递时,如果形参发生,并不会影响实参
void swap(int num1, int num2)
{
	cout << "交换前:" << endl;
	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;

	int temp = num1;
	num1 = num2;
	num2 = temp;

	cout << "交换后:" << endl;
	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;

	//return ; 当函数声明时候,不需要返回值,可以不写return
}

int main() {

	int a = 10;
	int b = 20;

	swap(a, b);

	cout << "mian中的 a = " << a << endl;
	cout << "mian中的 b = " << b << endl;

	system("pause");

	return 0;
}

5.2 函数的声明

作用: 告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。

  • 函数的声明可以多次,但是函数的定义只能有一次

示例:

//声明可以多次,定义只能一次
//声明
int max(int a, int b);
int max(int a, int b);
//定义
int max(int a, int b)
{
	return a > b ? a : b;
}

int main() {

	int a = 100;
	int b = 200;

	cout << max(a, b) << endl;

	system("pause");

	return 0;
}

 5.3 函数的分文件编写

        作用:让代码结构更加清晰

函数分文件编写一般有4个步骤:

  1. 创建后缀名为.h的头文件
  2. 创建后缀名为.cpp的源文件
  3. 在头文件中写函数的声明
  4. 在源文件中写函数的定义

示例:

//swap.h文件
#include<iostream>
using namespace std;

//实现两个数字交换的函数声明
void swap(int a, int b);
//swap.cpp文件
#include "swap.h"

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

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}
//main函数文件
#include "swap.h"
int main() {

	int a = 100;
	int b = 200;
	swap(a, b);

	system("pause");

	return 0;
}

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

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

相关文章

26k Star, 理解Git太轻松了。。。

程序员宝藏库&#xff1a;gitee.com/sharetech_lee/CS-Books-Store Git是目前使用比较广泛一款版本控制工具&#xff0c;从事开发工作&#xff0c;很难绕开Git。 因此&#xff0c;关于如何快速学习Git使用一直都是一个经久不衰的话题。 前不久我在另外一篇文章中曾提到Git对初…

【药材识别】基于色差色温特征结合SVM实现药材炮制程度判断系统附GUI界面

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

十九种卷积

参考文章:一文看尽深度学习中的20种卷积(附源码整理和论文解读) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/381839221 一、原始卷积(Vanilla Convolution) CNNs中的卷积,也称为滤波器,是由一组具有固定窗口大小且带可学习参数(learnable paramerters)的卷积核所组…

Java之IO流详解(一)——File类

一、File类创建文件 方法说明public boolean createNewFile()当具有该名称的文件不存在时&#xff0c;创建一个由该抽象路径命名的新空文件public boolean mkdir()创建由此抽象路径命名的目录public boolean mkdirs()创建由此抽象路径命名的目录&#xff0c;包括任何必须但不存…

Go常见错误第15篇:interface使用的常见错误和最佳实践

前言 这是Go常见错误系列的第15篇&#xff1a;interface使用的常见错误和最佳实践。 素材来源于Go布道者&#xff0c;现Docker公司资深工程师Teiva Harsanyi。 本文涉及的源代码全部开源在&#xff1a;Go常见错误源代码&#xff0c;欢迎大家关注公众号&#xff0c;及时获取本…

加载配置文件内容利用反射动态创建对象和调用方法(开闭原则的体现)

反射的应用&#xff1a;根据配置文件来创建对象和调用方法 需求&#xff1a;1&#xff0c;根据配置文件re.properties 指定的信息&#xff0c;创建对象并调用方法 classfullpathsrc.com.liu.Cat methodhi 即通过外部文件配置&#xff0c;在不修改源码的情况下&#xff0c;来控…

GAN详解

前言 GAN是当今作为火热的生成式算法&#xff0c;由Ian Goodfellow&#xff0c;Yoshua Bengio等人在2014年提出的&#xff0c;Yan LeCun表示道GAN是“adversarial training is the coolest thing since sliced bread”。它使用两个神经网络&#xff0c;将一个神经网络与另一个…

ArcGIS中ArcMap栅格图层0值设置为NoData值的简便方法

本文介绍在ArcMap软件中&#xff0c;将栅格图层中的0值或其他指定数值作为NoData值的方法。 在处理栅格图像时&#xff0c;有时会发现如下图所示的情况——我们对某一个区域的栅格数据进行分类着色后&#xff0c;其周边区域&#xff08;即下图中浅蓝色的区域&#xff09;原本应…

C语言学习记录(十五)C预处理器和C库

文章目录一、C预处理器1.1 翻译程序1.2 明示常量&#xff1a;#define1.3 在#define中使用参数1.4 文件包含&#xff1a;#include1.5 其他指令1.5.1 #undef指令1.5.2 从C预处理角度看已定义1.5.3 条件编译1.5.3.1 #ifdef、#else和#endif指令1.5.3.2 #ifndef1.5.3.3 #if和elif指令…

Gof23-创建型-工厂-单例-抽象工厂-建造-原型以及UML的绘制

创建型的设计模式工厂模式单例模式抽象工厂建造者模式原型模式UML图形的绘制工厂模式 工厂模式 Factory Pattern 适用的场景&#xff1a;统一的接口作为统一的零件&#xff0c;实现类作为零件的组合&#xff0c;将实例产品类的生产交给工厂&#xff0c;用户只需要面对工程提取…

XML的创建和读取

rapidxml是一个快速的xml库&#xff0c;由C模板实现的高效率xml解析库&#xff0c;同时也是boost库的property_tree的内置解析库。 当使用rapidxml时&#xff0c;只需要把rapidxml.hpp 、 rapidxml_print.hpp 和 rapidxml_utils.hpp 三个文件拷贝到你的工程目录下&#xff0c;就…

Pytorch中KL loss

1. 概念 KL散度可以用来衡量两个概率分布之间的相似性&#xff0c;两个概率分布越相近&#xff0c;KL散度越小。 上述公式表示P为真实事件的概率分布&#xff0c;Q为理论拟合出来的该事件的概率分布。D(P||Q)&#xff08;P拟合Q&#xff09;和D(Q||P)&#xff08;Q拟合P&…

ajax之Content-Type示例

参考资料: Content-Type详解【SpringBoot】SpringBoot接收请求的n种姿势 目录前期准备0. Content-Type概念解释1. application/x-www-form-urlencoded1.1 form表单示例1.2 jQuery的ajax示例2. application/json2.1 指定contentType为json,不使用RequestBody接收2.2 不指定cont…

01 OSI七层网络排查 troubleshooting 思路及对应工具

文章目录1 .前言2. OSI 的七层模型&#xff0c;和 TCP/IP 的四层 / 五层模型区别2.1 网络专业术语2.2 TLS 解释2.3 什么是TCP 流&#xff1f;3. 网络各层排查工具3.1 应用层3.1.1 浏览器的开发者工具3.1.1.1 找到有问题的服务端IP3.1.1.2 辅助排查网页慢的问题3.1.1.3 解决失效…

嵌入式数据库sqlite3

一、数据库 数据库的基本概念 常用的数据库 大型数据库 Oracle公司是最早开发关系数据库的厂商之一&#xff0c;其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。 IBM 的DB2是第一个具备网上功能的多媒体关系数据库管理系统&#xff0c;支…

bootstrap学习(四)

bootstrap中图片、按钮、表单 按钮&#xff1a; 不加样式的按钮&#xff1a; 在bootstrap中a标签也可以生成按钮&#xff1a; 默认按钮尺寸可以不加&#xff0c;它是自动显示默认尺寸 加btn-block&#xff1a;class 图片&#xff1a; 表单&#xff1a; 垂直表单&#xff1a;…

【语音识别】MFCC+VAD端点检测智能语音门禁系统【含GUI Matlab源码 451期】

⛄一、MFCC简介 1 引言 语音识别是一种模式识别, 就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的技术。语音识别技术主要包括特征提取技术、模式匹配准则及模型训练技术3个方面。目前一些语音识别系统的适应性比较差, 主要体现在对环境依赖性强, 因此要提高…

[mysql] 深入分析MySQL版本控制MVCC规则--实测 (mysql 8.0 innodb引擎)

背景&#xff1a;基于之前的一篇文章 可重复读&#xff1a;可重复读隔离级别的实现是每个事务在打开时都会生成一个一致的视图。 当其他事务提交时&#xff0c;不会影响当前事务中的数据。 为了保证这一点&#xff0c;MySQL是通过多版本控制机制MVCC来实现的&#xff1b; 我们亲…

Go语言面试题合集(2022)

基础语法 Go 支持默认参数或可选参数吗&#xff1f; 不支持。但是可以利用结构体参数&#xff0c;或者…传入参数切片数组。 // 这个函数可以传入任意数量的整型参数 func sum(nums ...int) {total : 0for _, num : range nums {total num}fmt.Println(total) }Go 语言 tag…

pandas算术运算、逻辑运算、统计运算describe()函数、统计函数、累计统计函数及自定义函数运算

一、pandas算术运算 直接对数据进行加、减、乘、除等运算&#xff0c;可使用函数add()、sub()、mul()、div()或、-、、 代码如下 数据生成 import pandas as pd import numpy as np# 数据生成代码 num np.random.randint(50, 100, (3, 5))# 传入标签索引 column [第一列, …