专栏简介:为什么我要重新介绍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、变量定义
变量的定义的基本格式是:首先是类型说明符,然后是变量名组成的列表,变量也可以赋初值,每个同类型的变量之间用逗号分开,结束时用分号隔开。
int i=-30;
std::string name("Tom"); //name通过一个string字面值初始化
注意:
在c++中,存在对象和变量这两种说法,很多人分不清对象和变量的区别,对象是指的是一块能存放数据并具有某种类型的存储空间。单单从定义上来说,其实都是一个东西。只是有人习惯的把与类有关的称为对象,实际上都可以称为对象,如何称呼完全依据个人的爱好。就像方法和函数的区分。
1.1.1、初始值
当对象在创建时获得一个特定的值,我们称为这个对象被初始化了。对于变量的定义,从定义的那一刻开始,在作用域类都是起作用的。
double price=10.98,Alcount=price*3;
//初始化格式正确,price从初始化开始就已经生效。
double sum=add(price,Alcount);
//调用函数add,将函数计算的值的返回给变量,正确。
在这里要注意一下,对于用函数来进行初始化这个问题,在后面会讲到常量表达式,这里会有一点冲突,一定要分清两者之间的差别。在一个就是关于赋值和初始化这两者的差别,虽然说不会影响编写程序,但是可以作为一个知识了解。赋值是指的是把对象(变量)当前的值擦除用新的值来代替,而初始化指的是创建变量时赋予一个初始值,二者之间有本质的差别。
1.1.2、列表初始化
对于对象(变量)的初始化,c++提供了多种初始化的方式,关于这些初始化的方式,如果能全部掌握更好,至于喜欢哪种就看个人喜欢。
int untiled=0;
int untiled={0};
int untiled{0};
int untiled(0);
在这几种初始化方式中,我比较推荐的是列表初始化({})。列表初始化虽然会有局限,但是却能帮助我们提高代码的合理性和准确性。
double first=3.1415926;
int second{first},third={first};
像上面这种情况,由于可能存在数据丢失的情况,所以使用列表初始化会导致报错,如果用其他的初始化方式,则不会出现问题:
double first=3.1415926;
int second(first),third=first;
1.1.3、默认初始化
说到变量初始化,就必须谈到一个问题,那就是当你定义了一个变量而没有初始化的时候,当你去输出他的值的时候,会出现奇怪的数值,甚至会出现报错,这是由于c++中有一个默认初始化。在任何的函数体内,变量如果不人为的初始化,则变量不会被初始化,但是定义在任何函数体之外的变量被初始化为0。
注意:
虽然c++有默认初始化机制,但是还是建议变量进行初始化,这样才能保证程序的安全,也能养成好的编程习惯。
1.2、变量声明和定义
关于变量声明和定义这个问题,很多刚入门的小伙伴都不是很了解,因为大家写代码的时候都不会用到太多的文件,变量都是在cpp文件中定义,即使两个文件需要使用相同的变量值,很多人也只是重新定义一个变量。但是在c++中,有一个声明(extern)的功能。
c++中,声明和定义是区分开的,声明使得名字被程序所知,一个文件如果想使用别的文件中的变量,则必须包含对那个变量的声明。定义则是负责创建与名字关联的实体。
变量的声明规定了变量的类型和名字,但是没有声明存储空间,而定义则是为变量开辟了内存空间。
extern int i; //声明i而非定义i
int i=100; //声明且定义i
在使用extern的时候要注意,不要给变量赋初始值,一旦初始化,就不再是声明,而是定义。所以,一旦声明某个变量,就不要给这个变量显示初始化,因为这样会导致extern失去作用。
注意:
变量只能被定义一次,但是可以被声明多次。
1.3、标识符
c++的表示符由字母,数字和下划线组成。数字不能作为开头,只有字母和下划线可以作为开头。
在定义表示符的时候,我们应该遵从相应的规则,这样才能使代码显的更加规整。
定义表示符的规则:
1、尽量使用英语单词或者缩写,要见名知意。
2、变量一般用小写字母开头,类名用大写字母开头。
3、对于组合的单词,中间用下划线隔开。
1.4、名字的作用域
作用域指的是变量或者对象,函数等具有功能的一个范围,通常是以{}位界限。关于作用域这个概念,并没有什么难点,只需要知道,只有在与之对应的作用域内,变量(对象),函数等实体才具有功能。
举个例子:
#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等循环之内的作用域,也大差不差。