C和C++的区别详解
通过程序来介绍
|
1 2 3 4 5 6 7 8 |
|
1.iostream文件
iostream中的io指的是输入(进入程序的信息)和输出(从程序中发送出去的信息)。
并且c++的输入、输出方案涉及iostream文件中的多个定义。比如用来输出信息的cout就在其中。
2.头文件名的区别
C语言
C语言的传统是头文件使用扩展名 h,将其作为一种通过名称标识文件类型的简单方式。例如 math.h支持一些数学函数。
C++
C++头文件没有扩展名。
有些C头文件被转换成C++头文件,这些文件被重新命名,去掉了扩展名h,并在文件名称前面加上前缀c(表示来自C语言)
3.名称空间namespace
如果使用的是iostream,而不是iostream.h,则应使用名称空间编译指令来使iostream中的定义对程序可用,即
|
1 |
|
有了这句using编译指令,才能使用cout、cin等,或者用第二种方式:
|
1 2 3 |
|
名称空间是C++的特性之一,简单理解为:可以将自己的产品封装起来。
示例
封装性
示例:
首先定义一个头文件

在里面写上我们自己编的东西:
|
1 2 3 4 5 6 |
|
然后在cpp文件中引入该头文件,但我们却无法使用之前写好的东西。

INT a会报错,因为我们只引入了头文件,没有使用里面的名称空间。
正确做法:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
需要第六行的该名称空间才可以使用其中的产品。或者可以用第七行这种写法来确定自己只需要哪个产品。
运行结果:
![]()
4.使用cout进行C++的输出
上面的程序有这条C++语句:
|
1 |
|
<<符号表示该语句将把这个字符串发送给cout,该符号指出了信息流动路径。 cout是一个预定义的对象。
从概念上看,输出是一个流,即从程序流出的一系列字符。cout对象表示这种流,其属性是在iostream文件中定义的。
cout的对象属性包括一个插入运算符(<<),它可以将其右侧的信息插入到流中。
图示

指针和数组名的区别
程序示例:
|
1 2 3 4 5 6 7 8 9 10 11 |
|
这里定义了一个指针p和一个数组arr。
运行结果都是地址

反汇编查看区别
cout << p << endl;
|
1 2 3 4 5 6 |
|
cout << arr << endl;
|
1 2 3 4 5 6 |
|
区别

在输出指针时,需要先从p里面取出四字节,再放到寄存器里push;
在输出arr时,直接把arr放到寄存器里再push。
结论
指针是变量;
数组名是一个地址——常量。
解引用
在C语言中学到,对指针解引用后得到的值就是它寸的地址对应的变量值。
可以来探索原理
程序示例
|
1 2 3 4 5 6 7 8 9 |
|
反汇编代码:
|
1 2 3 4 5 6 7 8 |
|
对于*p = 20
先从p的内存中取四个字节,即变量a的地址放入寄存器,再将20给到寄存器所存的的四字节中。完成对变量a的改变。
所以解引用的意思就是从地址中把值取出来,这里是去p的地址里取出所存的变量a的地址。
程序示例2:
|
1 2 3 4 5 6 7 8 9 |
|
复制讲解
反汇编代码:
|
1 2 3 4 5 6 7 8 9 10 |
|
对于 b = *p;
1.先去p里取出四字节放入寄存器
2.再从寄存器eax取出四字节放入寄存器ecx再把ecx
3.的内容放入到变量b的四字节中。
也可以看出:解引用这一步其实是去地址里取值的。这样也可以得出:用一个变量赋值给另一个变量,其实也是在解引用。
更多推荐
所有评论(0)