C++ cout字符数组和普通数组

int ab[10] = {1,2,3,6,7};
char a[6] = {'h','a','p','p','y','\0'};
char ac[] = "happy";
cout<

为啥输出结果是字符串就是一块连续的内存空间,整型数组就不是?那整型数组在内存上的顺序都是断续的吗?
那数组char a[5]={'h','a','p','p','y'}呢?为什么直接输出cout<
解答:
1、char型数组中每一个元素都是1个字节所以字符串之间的地址是加1的,但是int数组每个元素占4个字节所以数组中每个元素地址的间隔是4,其实它也是连续的,出现乱码是因为系统没有找到结束符,你可以把数组设大一点,然后最后一个字节添0如:char a[6]={'h','a','p','p','y',0};就可以了。
2、因为C和C++不进行数组的边界检查,数组在内存中存放的只是所有数组元素的值,而不存在一个地方可以表示数组的大小.所以cout函数没法知道该输出多少个元素。而字符串则不同,它有一个'\0'用来表示字符串结束,cout看到'\0'就知道输出结束了。可能你想问,为什么别的类型不也弄个类似于'\0'的结束符呢.那我就反问你,你认为哪个值用来做结束符合适?字符串可以用'\0'来表示结束,是因为'\0'这个值就是专门用来表示字符串结束的,对于其他类型,比如整数,你能说用0或-1来专门表示数据结束么。
 
  
 
  
 
  
 
  
 
 

你可能感兴趣的:(C++)