今天看书的时候复习了一下以前关于字符串的东西,有些东西想不通,就做了一下实验,结果有点小发现分享一下。
书上本来做一个储存姓名的容器,用指针来保存。但是使用的时候是 const char name*=name_in[i];
我就想,为什么要加const 呢,文件中的人名是固定的,存进去了不能修改,使用const 在逻辑上是说的通的,但是,想了一下,字符串常量里面的值真的就不能改吗?
那如果在一个字符数组中保存一个字符串常量,再修改其中一个的值,结果会修改字符串常量吗?
做一个小实验:
<span style="font-size:18px;">#include <iostream>
using namespace std;
int main()
{
char a[10] = "abcde";
int i;
for (i = 0; i < 5;i++)
cout << (void *)a[i] << endl;
cout << endl;</span>
<span style="font-size:18px;"> a[2] = 'f'; for (i = 0; i < 5; i++) cout << (void *)a[i] << endl; system("pause()"); return 0;}</span>程序中,第一个for循环是显示保存在数组中各个字符的地址。 之后修改了a[2]中的值,再次用for循环显示地址。
结果如下:
第一次的for循环,地址是连续的。
第二次的for循环,修改了a[2]。结果发现字符的地址被改了,但是,我是把a[2]中的'c'改为了'f',而'f'恰好是与a[4]中的'e'连在一起的。通过地址我们发现,它们的地址一个是65,一个是66。
所以,结论我的是,我们存在char 数组中的都是这些字符的地址,而这些地址都是连续的,而且这些字符似乎是之前就已经固定存在我们计算机中的,作为常量保存,内存中的值不能被改动,因此也叫字符常量。
当然,这只是我自己的说法,有错误请大神指出。