C++入门:变量类型

news/2024/10/30 13:32:24/

变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

变量的类型间是可以互相转换的,转换又分为自动转换和强制转换。

自动转换规则:

1、若参与运算量的类型不同,则先转换成同一类型,然后进行运算。

2、转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 a、若两种类型的字节数不同,转换成字节数高的类型 b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型

3、所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。

4、char型和short型参与运算时,必须先转换成int型。

5、在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度:

int a=1;
double b=2.5;
a=b;
cout << a; //输出为 2,丢失小数部分
int a = 1;
double b = 2.1;
cout << "a + b = " << a + b << endl;  //输出为a + b = 3.1

强制转换规则:

强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型

int a = 1;
double b = 2.1;
cout << "a + b = " << a + (int)b << endl;  //输出为a + b = 3

现在才算理解声明和定义的区别了:

定义包含了声明,但是声明不包含定义,如

int a = 0;     //定义并声明了变量 a
extern int a;  //只是声明了有一个变量 a 存在,具体 a 在哪定义的,需要编译器编译的时候去找。

函数也是类似,定义的时候同时声明。但如果只是声明,编译器只知道有这么个函数,具体函数怎么定义的要编译器去找。

void fun1();  //函数声明void fun1(){  //函数定义cout<<"fun1"<<endl;
}

变量左值可以出现在等式的左边或者右边。出现在左边可以用来判锻NULL,以防出现逻辑错误

#include "stdafx.h"int  *a = NULL;
int main()
{if (a = NULL)//赋值语句,并非判断语句{return false;}if (NULL = a)//!!!!ERROR  此处在程序编译阶段不通过,“=”右边不能为变量名{return false;}if (a == NULL)//可行 ,判断指针a是否为空{return false;}if (NULL == a)//可行 ,判断指针a是否为空。在实际项目中,为了防止将“==”误写作“=”推荐讲变量名写在右侧,编译器可以帮助寻找错误{return false;}return 0;
}

C/C++ 编译 cpp 文件是从上往下编译,所以 main 函数里面调用其他函数时,如果其他函数在 main 函数的下面,则要在 main 函数上面先声明这个函数。

或者把 main 函数放在最下面,这个不仅限于 main 函数,其他函数的调用都是如此。被调用的函数要在调用的函数之前声明。


http://www.ppmy.cn/news/21435.html

相关文章

C++基础知识点整理笔记(五)

14. 类中 private&#xff0c;protect&#xff0c;public 三种访问限制类型的区别 (一) private 是私有类型&#xff0c;只有本类中的成员函数访问;(二) protect 是保护型的&#xff0c;本类和继承类可以访问;(三) public 是公有类型&#xff0c;任何类都可以访问. 15. struct…

消息队列简介

提高系统性能首先考虑的是数据库的优化&#xff0c;之前一篇文章《数据库的使用你可能忽略了这些》中有提到过开发中&#xff0c;针对数据库需要注意的事项。但是数据库因为历史原因&#xff0c;横向扩展是一件非常复杂的工程&#xff0c;所有我们一般会尽量把流量都挡在数据库…

spring中的JSR-303统一校验

1.在前后端的传输参数的过程中数据在何处校验? 在前后端都需要进行校验,只是分工不同. 2.各个层的校验内容: 1.Controller层主要负责校验残水的合法性,包括: 必填的参数字段,数据格式的校验 2.Service层的业务校验是审核业务中的规则的相关内容,比如:课程已经审核通过所以提…

SpringCloud_Alibaba Sentinel实现熔断与限流

目录一、Sentinel介绍1.官网2.是什么3.能干嘛4.去哪下5.怎么玩二、安装Sentinel控制台1.sentinel组件由2部分组成2.安装步骤三、初始化演示工程1.启动Nacos8848成功2.案例3.启动Sentinel80804.启动微服务84015.启动8401微服务后查看sentienl控制台四、流控规则1.基本介绍2.流控…

195136-58-4,2‘,7‘-Difluorofluorescein,2,7-二氟荧光素

产品描述&#xff1a;2&#xff0c;7-二氟荧光素中Fluorescein (Uranine) 生物应用中的荧光示踪剂&#xff0c;Fluorescein (Uranine) 是一种具有代表性的绿色荧光团&#xff0c;已被广泛用作实用绿色荧光探针的支架。结构式&#xff1a;理论分析&#xff1a;中文名&#xff1a…

【批处理脚本】-1.6-列文件名命令dir

点击返回「批处理BAT从入门到精通」总目录 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,使用“批处理(bat)”和“Python”制作脚本,从而实现编译功能(GreenHills…)的…

spark读取数据写入hive数据表

目录 一个模板 概述&#xff1a; create_tabel建表函数&#xff0c;定义日期分区 删除原有分区drop_partition函数 generate_data 数据处理函数&#xff0c;将相关数据写入定义的表中 添加分区函数add_partition 一个模板 概述&#xff1a; table_name name # 要写入…

STM32的最大中断频率

在查找资料后发现&#xff0c;在STM32F103&#xff08;主频为72MHz&#xff09;中最大中断频率为500kHz。从中断触发-压栈-中断向量表-进入中断处理函数是需要执行很多个指令的。 STM32F103的主频是72M的&#xff0c;按照T&#xff08;arr1&#xff09;*(PSC1)/Tck 其中TCK为时…