首页 > 编程语言 >C++自学笔记2(变量与函数)

C++自学笔记2(变量与函数)

时间:2024-07-21 09:55:18浏览次数:16  
标签:函数 int 数据类型 笔记 C++ Multiply 自学 我们 字节

变量(数据)

编程的本质实际上就是操纵数据,任何种类的数据。我们想对数据进行修改、读取、写入,我们将数据放在一个叫做变量的东西,他可以允许我们对数据命名。

我们需要利用数据、存放数据。当我们创造一个变量时,他被存放在两个地方“堆”和“栈”(再挖个坑)在物理意义上我们的数据存放在内存之中,数据有不同的类型解决不同数据如:123、-456、abc、2.3、-5.5

数据类型有最基本的数据类型,每个基本数据类型有各自的特点和功能。

但是,其基本变量之前的差距就是大小,在内存中占据多少大小。

int var;我们传统上定义int为4字节数据类型,这取决于编译器的不同。

int var = 15;我们可以将变量var赋值为5,那么这个赋值数据有没有范围呢?

有的,范围从-21亿到+21亿,当大于这个范围时我们就要重新选择数据类型防止溢出。

为什么有正负号、为什么是21亿呢?

首先,int是一个有符号的整数,其占据4字节,每个字节8bit一位置我们有32bits存储0/1,我们需要拿出最高位表示符号的正负。那么就有31位表示数据大小,2的31次方也就是2147483648,所以具体的范围实际上是-2147483648到+2147483648。

如果说你不想要负数,那么有没有方法呢?有那就是关键字unsigned

unsigned int var = 15;表示一个无符号的整数,意味着32位都用来存放数据位,所以2的32次方4294967296,那么其可赋值的范围就是0到4294967296

基本的数据类型

char (1字节)

short(2字节)

int (4字节)

long(4字节)->不同编译器不同有的8字节

其中char有些特殊,你可以给他赋值字符

char a = ‘A’;那么我们打印出的就是字符A,如果

int  a = ‘A’;那么我们打印出的就是数字65,在ASCII码中65与A相对应。所以我们也可以

char a = 65;那么我们打印出的依旧是字符A。

为什么要字符是数字,数字是字符?

作为程序员我们当然希望输出的可以是字母,所以我们定义char输出字母。那为什么对char类型变量输入数字也输出字母呢?原因是电脑是机器只认识数据且只认识0和1,那么怎么让机器认识字母呢,定义了ASCII表将字母与数字对应,只要在数字打上char字符类型就说明这个不是数字了,需要变成根据ASCII表将其变成字母。

数据类型间区别就是大小!!!

存储小数我们就要用到

float(4字节)double(8字节)

float var = 5.5

double var = 6.6

如果只是这样写5.5与6.6都是双精度数据(double)类型占8个字节,所以

float var = 5.5f

才是占据4字节的数据。

最原始的数据类型是bool,(1字节)其值只有0和除0以外的数分别代表False和True。

非零都是真。

那么你可能想问如果只表示真假用1 和0即可为什么还占据1字节(8bit)而不是1bit?

两个方面,一是当我们对bool var=888判断时其占据的位数超出1bit。

二是,我们进行寻址操作时(找到bool的内容)只能进行字节寻址,不能进行位寻址,我们只能访问字节,所以不可以单独设立位存贮1bit数据。但是我们可以在一个字节内存放8个bool变量,这样他们还是占据1个字节,表示8个不同的bool值。

函数

函数就是我们编写的代码块,用来执行某些操作。

函数存在的意义是什么?

当我们需要多次且重复执行某个任务时,反复地粘贴会让代码看起来吵人眼睛,并且会有细小的变量名出现错误。总的来说就是简化代码,避免重复。所以,我们将其写为函数多次调用来让代码变得好看,便于维护。

函数通常有一个或多个输入,有一个输出。

#include <iostream>

int Multiply(int a, int b)
{
    return a*b;
}
int mian()
{
    int ver = Multiply(5, 2);
    std::cout<< ver <<std::endl;
}

 我们构造ab相乘的函数,并将其打印。如果我们想打印多个乘法时会是以下现象

#include <iostream>

int Multiply(int a, int b)
{
    return a*b;
}
int mian()
{
    int ver0 = Multiply(5, 2);
    std::cout<< ver0 <<std::endl;

    int ver1 = Multiply(8, 5);
    std::cout<< ver1 <<std::endl;

    int ver2 = Multiply(3, 6);
    std::cout<< ver2 <<std::endl;

    int ver3 = Multiply(5, 9);
    std::cout<< ver3 <<std::endl;

}

我们计算了四个乘法并将其打印,我们注意到多个乘法我们不仅仅是改变 Multiply函数中ab的值,我们创建了四个ver0123。当我们将5*2这个代码块复制时很容易忘记改变变量名这个事情,尤其是在不同文件下,维护起来就更加麻烦。

所以对于这个种“多次、重复、有规律性”代码块,我们将其写为一个函数。

#include <iostream>

int Multiply(int a, int b)
{
    return a*b;
}

void MultiplyAndLog(int a, int b)
{
    int ver = Multiply(int a, int b)
    std::cout<< ver <<std::endl;
}

int mian()
{
    MultiplyAndLog(5,2);
    MultiplyAndLog(8,5);
    MultiplyAndLog(3,6;
    MultiplyAndLog(5,9);

}

两相对比就能看出函数存在的意义了。

可能有同学问为什么Multiply函数前用int、MultiplyAndLog函数前用void?

首先int类型函数需要有返回值,也就是要用return返回点什么东西。默认为0,或者其他函数值又或者以上的算式。void类型函数就说明MultiplyAndLog函数什么都不返回,执行就可以了。

那么,为什么main函数那么特殊int类型却没看见return呢?

答案就在谜面上,因为他特殊,他是主函数,为了简洁化虽然不用返回值但是默认最后一行有一串return 0;

当然我们也可以改成void main()都可以,随便你。

当写一个项目时,我们通常将函数定义放在其<>文件,调用头文件达到进一步的简化项目的目的。

标签:函数,int,数据类型,笔记,C++,Multiply,自学,我们,字节
From: https://blog.csdn.net/weixin_64418869/article/details/140575468

相关文章

  • C++自学笔记3(头文件)
    头文件就是各个函数申明存放地(也可以放结构体)现在你有main.c文件、A.c、B.c文件A.c包含A()函数B.c包含B()函数如果想要在main.c中使用A()B()两个函数,那么我们必须在intmain()之上进行申明_________________________________________________________________________//mai......
  • Standard Template Libary or C++ Standard Library
    C++提供一套标准的library称为C++standardlibrary完全以template完成,所以又被称为StandardTemplateLibrary。这套library专门有于实现常用的据结构(例如arry、list......)以及常用的算法(例如push,pop,insert,delete,query,retrieval......)。一般来说,STL包含六个主要的组件......
  • 读写给大家的AI极简史笔记03深度学习
    1. 人工大脑1.1. 语言学习模型1.1.1. 1986年,美国心理学家大卫·鲁梅尔哈特(DavidRumelhart)和詹姆斯·麦克莱兰(JamesMcClelland)提出了一个语言学习模型1.1.2. 它学习语言的方式无异于儿童1.2. 科学家们没有教系统任何规则,而是让计算机自己总结出现在时态动词改为过去时......
  • 如何在 Pycharm IDE 中折叠或更好地组织长 Jupyter 笔记本单元?
    我正在使用包含大量单元格和输出的长Jupyter笔记本(.ipynb文件),在PyCharm中导航它们变得很麻烦。IDE似乎本身并不支持单元格折叠,这使得管理笔记本变得相当困难。是否有任何插件、设置或解决方法可以更好地组织或折叠PyCharm中的单元格?如何使我的笔记本文件在此IDE中......
  • 如何使用 for 循环在 python jupyter 笔记本中创建动态图?
    我正在学习本课关于用Python求解热方程。该课程指出,在求解热方程后,我们可以通过在循环中简单地调用pyplot.plot()来可视化解的动画图,其中下面的代码将动态绘制每次每个点的温度,从而得到一个动画情节(课程帖子中提供了动画情节的示例)。importnumpyfrommatplotlibi......
  • C++面向对象三大特性:继承
     前言:众所周知,C++作为一个面向对象的编程语言,有着三大特性:封装,继承,和多态。在前面的C++学习中,我们大部分所接触的只有封装,现在,就让我们来认识一下继承吧。一、继承的概念继承是指一个类(子类)从另一个类(父类)获得属性和行为的过程,它是使得代码得到复用的重要手段,允许程序员......
  • C++分组背包问题_动态规划dp_背包_算法竞赛
    OIWiki上的详细讲解模型总结分组背包的问题模板:有nnn件物品和一个大小为mm......
  • spring boot(学习笔记第十四课)
    springboot(学习笔记第十四课)SpringSecurity的密码加密,基于数据库认证学习内容:SpringSecurity的密码加密基于数据库认证1.SpringSecurity的密码加密如果用户的密码保存在数据库中是以明文保存,对于公司的安全将是灾难性的,哪个公司也不会允许用户数据使用明文保......
  • 一元二次方程c++题目
    描述利用公式x1=(-b+sqrt(b*b-4*a*c))/(2*a),x2=(-b-sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+bx+c=0的根,其中a不等于0。输入输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程ax?+bx+c=0的系数。输出输出一行,表示方程的解。若b2=4*a*c,则两个实根相......
  • Linux C++ 065-设计模式之组合模式
    LinuxC++065-设计模式之组合模式本节关键字:Linux、C++、设计模式、组合模式相关库函数:概念组合模式(CompositePattern),又叫做部分-整体模式,使得用户对单个对象和组合对象的使用具有一致性。它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理......