char name[8];这里完全没有想到会有这么多的知识点在里面。
首先疑问出自为什么使char 类型,而不是string,接着为什么是数组。这里的数组如果说是存放8个名字,完全不合乎常理啊,那到底问题在哪呢?
第一:数组概念
数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。[ ]内的数值是数组包含元素的数量。
char name [8]是包含8字符(char)的数组,该数组的名称为name(变量)。
第二:name[8]的意思
name [8],从name[0]开始到name[7]结束.char 是字符类型,存储1个字节的字符,就是每个数组元素占1个字节,就是8位.所以一般用字符数组(连续的一组字符)来保存字符串。所以这个数组占64位.但是一般情况下数组中最后一个字节要用来存放' \0' ,表示字符串的结束,它会占一个字节的,所以在定义的时候也要考虑给' \0' 分配空间,所以这里实际能用的空间只有7个字节, 每一个姓名不管大小都会占用7个字节,一个汉字占两个字节,其实这里只考虑了三个字的姓名(如果是英文就是7个字母)。所以这有个前提就是数组要能够装得下!在实际应用中,下标越界其实是非常危险的,因为会改变未知区域的数据。
这里为什么不是8个name的意思呢,首先不太合乎实际,而且如果是表示8个name,表示的方法应该是char name[8][8]或者char *name[8]。
第三:char与string
char name[8] 赋值的时候要一个一个赋值,而用string name 可以直接对name进行赋值。
另外如果这里的背景是C语言,那么就没有字符串变量,都是用char数组储存,例如一个单词arvin,它需要6个字符(包括最后的'\0')也就是char a[6]才能完全储存这个单词.
如果背景是c++,那么char 就是基本的变量类型c,har 内置类型,而string 是一个结构体, 是个库类型,他有内部的元素和构成方法,但凡库类型,都有一套自我的规则和定义,也就是封装.操作起来比char要复杂。 内存空间就是由基本的数据类型来申请,string的内部实现也需要基本数据类型。
第四:头文件
是不是没有想到这里还和头文件有关。学C++的时候,我们学过头文件,这也就很好的体现了课程之间是彼此联系的。
字符串变量是C++中所特有的。在定义字符串变量时一定要注意头文件的形式是下面这种才能使用字符串:
#include<iostream>
using namespace std;
但要是头文件变为:
#include<iostream.h>
就不能用字符串定义变量的。
头文件为第一种时,字符串变量比字符数组方便。
但在头文件为第二种时,只能用字符数组,不能用字符串变量。
因为<iostream>包含了一系列模板化的I/O类,相反地<iostream.h>仅仅是支持字符流。另外,输入输出流的C++标准规范接口在一些微妙的细节上都已改进,因此,<iostream>和<iostream.h>在接口和执行上都是不同的。
<iostream>表示使用的是标注命名空间,也就是在程序开始应该有这么一句话
using namespace std ; 这是遵循c++标准的
<iostream.h> 则没有遵循c++标准
如果用了isotream则一定要引入命名空间,即”using namespace std;如果用了iostream.h,则不能引入命名空间,否则会引起编译错误,提示找不到命名空间
#include<iostream>和#include<iostream.h>的区别_jzjwonderful的专栏-CSDN博客