字符串在内存中的存储

来源:互联网 发布:python 打包发布 编辑:程序博客网 时间:2024/05/22 11:54

今天看书的时候复习了一下以前关于字符串的东西,有些东西想不通,就做了一下实验,结果有点小发现分享一下。

书上本来做一个储存姓名的容器,用指针来保存。但是使用的时候是  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 数组中的都是这些字符的地址,而这些地址都是连续的,而且这些字符似乎是之前就已经固定存在我们计算机中的,作为常量保存,内存中的值不能被改动,因此也叫字符常量。

当然,这只是我自己的说法,有错误请大神指出。

1 0
原创粉丝点击