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

变量(数据)

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

我们需要利用数据、存放数据。当我们创造一个变量时,他被存放在两个地方“堆”和“栈”(再挖个坑)在物理意义上我们的数据存放在内存之中,数据有不同的类型解决不同数据如: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()都可以,随便你。

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

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值