1,C++的初始化
1.1c和c++中的初始化
在c语言中我们的初始化方式通常都是
这样的初始化方式简单明了
在c++中我们通常选择
这种方式来初始化变量,使用()来初始化是古早版本中c++初始化的方法,如果不给初始值,他就会默认为零,指针则是NULL。那么我们来看看上面的初始化,使用()初始化方法有一个很明显的坏处,
你内心想的是,定义一个整形sum,值为空,但编译器会把它当作是一个函数来对待,函数的返回值是int。而使用{}就可以避免这种情况。
2,输入输出
2.1c的输入输出
2.2c++的输入输出
>>在c++里我们叫提取符,<<我们叫插入符,endl我们认为等于\n的作用
观察两种不同的输入输出方式,很明显的看出c++的更加简洁,他不需要指定变量的类型,如果你需要修改数据类型,c语言还需要修改打印和输入函数,而c++则不需要。
同时我们关注下图
stdio.h头文件是我们使用c语言时引得头文件,他包含了标准输入(in),标准输出(out),标准错误(err)。
iostream是我们c++的头文件,他包含了cin,cout,cerr,clog
cin是标准输入流对象,cout是标准输出流对象,cerr是标准错误流对象,clog是标准日志输出对象,值得注意的是,cerr是无缓冲区的,cout和clog都是有缓冲区的,缓冲区的概念我不再赘述。
cerr输出的是错误信息,需要尽快显示到屏幕上,所以无缓冲区。
cout用于正常的输出,比如程序运行结果。
clog用于输出程序的运行状态或诊断信息,通常用于调试或日志记录。
2.3字符串的输入
我们可以看到,使用cin输入字符串时,遇到空格就会结束,因为字符串是以\0作为结束的,而有时我们需要加入空格该怎么办呢。
我们可以使用cin.getline来输入字符串,括号内第一个参数是数组名,第二个是数组大小,这种输入便不会出现之前的情况。
3,const关键字
const关键字是非常重要的一部分,我们今天先简单认识一下他
3.1const变量
test.c
上图是一个很简单的c语言程序,但仍然有可以拿出来说说的点,我们都知道const修饰的变量叫做常变量,不可以修改值,但我们可以通过(int*)这种方式来强转他的类型,以此来通过指针修改它的值。但这很明显不是我们想要的,我们不希望修改n的值才会使用const关键字,这个问题在c++中我们得到了解决。
同时因为n是一个常变量,我们也不能使用他来当作数组的大小。
test.cpp
我们观察上述c++程序,发现了两点跟上面c程序的不同,一是我们的n可以做数组大小了,二是我们即使强转了n也无法使用指针改变n的值,这是为什么呢。
通过调用监视窗口我们发现n的值和*p的值都被修改成了100,这并没有解决我们的问题,
通过查阅资料我得知,原因是因为在c++程序中使用const修饰后,会把n当成常量值,在代码的编译阶段,会将所有的n替换成10,这就解释了为什么可以使用n当作数组大小,以及为什么在printf函数中n的大小还是10。
3.2const和指针
上图这些指针和const的关系在c语言中我们已经学习过了
p1是普通指针 ,p2指向为常性,解引用为常性 ,p3指针变量自身是常性 ,p4指向和指针变量自身都是常性。
p2我们叫常量指针,p3是指针常量,关于这两位的特性简单来说,
常量指针,值不能通过指针修改,指针的指向可以改变
指针常量,可以通过指针修改常量值,指针的指向不能改变,谁后说,谁能变。
3.3常变量和指针
上图我们发现第八行,第十行报错了,这解释起来也很简单。
变量a是常变量,他的值不能去修改,而p1作为一个普通指针,是可以通过解引用修改a的值的,p3作为一个指针常量,也可以修改其值,所以这两个都是不能定义的,是错误的。而p2和p4则保证了a值不可修改,所以可以定义。
总结而得就是能力强的指针赋值给能力收缩的指针,权限在赋值时候只能一步步变小,不能扩大。