c++入门——变量

**专栏简介:**为什么我要重新介绍c++的相关知识,在此之前,我对于c++的了解也仅仅是在表面。而在后来与c++慢慢的接触中,c++编程语言越来越让我觉得深奥,所以还是想要重新开创一个专栏来介绍c++。对于c++的介绍,本专栏会先介绍98版的c++知识,之后会介绍11版的c++知识。

**日常分享:**每天努力一点,不为别的,只是为了日后,能够多一些选择,选择舒心的日子,选择自己喜欢的人!

目录

1.1、变量定义

1.1.1、初始值

1.1.2、列表初始化

1.1.3、默认初始化

1.2、变量声明和定义

1.3、标识符

1.4、名字的作用域


变量的概念,简单的说就是一个具有名称,可以供程序员操作的一个存储空间。由于c++是静态型编译语言,所以在定义变量时必须明确指明变量的数据类型,这样才能让程序在编译的时候分配合适的内存空间。

1.1、变量定义

变量的定义的基本格式是:首先是**类型说明符,**然后是变量名组成的列表,变量也可以赋初值,每个同类型的变量之间用逗号分开,结束时用分号隔开。

cpp 复制代码
int i=-30; 
std::string name("Tom"); //name通过一个string字面值初始化

注意:

在c++中,存在对象和变量这两种说法,很多人分不清对象和变量的区别,对象是指的是一块能存放数据并具有某种类型的存储空间。单单从定义上来说,其实都是一个东西。只是有人习惯的把与类有关的称为对象,实际上都可以称为对象,如何称呼完全依据个人的爱好。就像方法函数的区分。

1.1.1、初始值

当对象在创建时获得一个特定的值,我们称为这个对象被初始化了。对于变量的定义,从定义的那一刻开始,在作用域类都是起作用的。

cpp 复制代码
double price=10.98,Alcount=price*3;
//初始化格式正确,price从初始化开始就已经生效。
double sum=add(price,Alcount);
//调用函数add,将函数计算的值的返回给变量,正确。

在这里要注意一下,对于用函数来进行初始化这个问题,在后面会讲到常量表达式,这里会有一点冲突,一定要分清两者之间的差别。在一个就是关于赋值初始化这两者的差别,虽然说不会影响编写程序,但是可以作为一个知识了解。赋值是指的是把对象(变量)当前的值擦除用新的值来代替,而初始化指的是创建变量时赋予一个初始值,二者之间有本质的差别。

1.1.2、列表初始化

对于对象(变量)的初始化,c++提供了多种初始化的方式,关于这些初始化的方式,如果能全部掌握更好,至于喜欢哪种就看个人喜欢。

cpp 复制代码
int untiled=0;
int untiled={0};
int untiled{0};
int untiled(0);

在这几种初始化方式中,我比较推荐的是列表初始化({})。列表初始化虽然会有局限,但是却能帮助我们提高代码的合理性和准确性。

cpp 复制代码
double first=3.1415926;
int second{first},third={first};

像上面这种情况,由于可能存在数据丢失的情况,所以使用列表初始化会导致报错,如果用其他的初始化方式,则不会出现问题:

cpp 复制代码
double first=3.1415926;
int second(first),third=first;

1.1.3、默认初始化

说到变量初始化,就必须谈到一个问题,那就是当你定义了一个变量而没有初始化的时候,当你去输出他的值的时候,会出现奇怪的数值,甚至会出现报错,这是由于c++中有一个**默认初始化。**在任何的函数体内,变量如果不人为的初始化,则变量不会被初始化,但是定义在任何函数体之外的变量被初始化为0。

注意:

虽然c++有默认初始化机制,但是还是建议变量进行初始化,这样才能保证程序的安全,也能养成好的编程习惯。

1.2、变量声明和定义

关于变量声明和定义这个问题,很多刚入门的小伙伴都不是很了解,因为大家写代码的时候都不会用到太多的文件,变量都是在cpp文件中定义,即使两个文件需要使用相同的变量值,很多人也只是重新定义一个变量。但是在c++中,有一个声明(extern)的功能。

c++中,声明和定义是区分开的,声明 使得名字被程序所知,一个文件如果想使用别的文件中的变量,则必须包含对那个变量的声明。定义则是负责创建与名字关联的实体。

变量的声明规定了变量的类型和名字,但是没有声明存储空间,而定义则是为变量开辟了内存空间。

cpp 复制代码
extern int i; //声明i而非定义i
int i=100; //声明且定义i

在使用extern的时候要注意,不要给变量赋初始值,一旦初始化,就不再是声明,而是定义。所以,一旦声明某个变量,就不要给这个变量显示初始化,因为这样会导致extern失去作用。

注意:

变量只能被定义一次,但是可以被声明多次。

1.3、标识符

c++的表示符由字母,数字和下划线组成。数字不能作为开头,只有字母和下划线可以作为开头。

在定义表示符的时候,我们应该遵从相应的规则,这样才能使代码显的更加规整。

定义表示符的规则:

1、尽量使用英语单词或者缩写,要见名知意。

2、变量一般用小写字母开头,类名用大写字母开头。

3、对于组合的单词,中间用下划线隔开。

1.4、名字的作用域

作用域指的是变量或者对象,函数等具有功能的一个范围,通常是以{}位界限。关于作用域这个概念,并没有什么难点,只需要知道,只有在与之对应的作用域内,变量(对象),函数等实体才具有功能。

举个例子:

cpp 复制代码
#include<iostream>
int sclean=40; //全局变量,作用于全局作用域
int main(){

//进入作用域
{
int i=10; //这里的i只能在这里使用,超出作用域就不可使用;
std::cout<<i<<std::endl;
}
int i=100; //这里可以二次定义,因为前面定义的i已经失效
std::cout<<i<<std::endl;
//int sclean=34; //这里错误,函数体内的变量不能与全局变量重名。
return 0;
}

萨和嗯面的程序很好的解释了关于作用域这个概念,当然除此之外,还有while,for等循环之内的作用域,也大差不差。

相关推荐
小莞尔26 分钟前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
我是菜鸟0713号1 小时前
Qt 中 OPC UA 通讯实战
开发语言·qt
JCBP_1 小时前
QT(4)
开发语言·汇编·c++·qt·算法
Brookty1 小时前
【JavaEE】线程安全-内存可见性、指令全排序
java·开发语言·后端·java-ee·线程安全·内存可见性·指令重排序
百锦再1 小时前
[特殊字符] Python在CentOS系统执行深度指南
开发语言·python·plotly·django·centos·virtualenv·pygame
Anson Jiang1 小时前
浏览器标签页管理:使用chrome.tabs API实现新建、切换、抓取内容——Chrome插件开发从入门到精通系列教程06
开发语言·前端·javascript·chrome·ecmascript·chrome devtools·chrome插件
会开花的二叉树1 小时前
继承与组合:C++面向对象的核心
java·开发语言·c++
潮汐退涨月冷风霜2 小时前
数字图像处理(1)OpenCV C++ & Opencv Python显示图像和视频
c++·python·opencv
长河3 小时前
Java开发者LLM实战——LangChain4j最新版教学知识库实战
java·开发语言
第七序章3 小时前
【C++STL】list的详细用法和底层实现
c语言·c++·自然语言处理·list