字符串常量

今天我想说一下在c中字符串常量的问题。在这里首先要先说明一下,我们知道,在程序中数值型常量在编译后并不是存在数据段之中,而是直接作为立即数存在程序之中,也就是说,程序编译后,该数值型常量就存在程序之中,当程序执行过程中,并不需要在数据段提取。

类似汇编中的

Mov a,#12 

而字符串常量就不同了。

当我们在程序中使用字符串常量时,它是被存在常量区,常量区的数据是不能更改的,而且它是有地址的,是可以像正常的变量一样通过地址来访问的,只不过特殊的一点是他们的值不能改变。

#include<stdio.h>

#include<string.h>

int main()

{

       char *p="you are better"; //将指针指向该字符串首个字符的地址 

    *p='a';

}

当你试着去运行这段程序的话,你会发现程序会奔溃,因为你试图改变常量区的数值,而这是不允许的(例如rom存储器的数据是不能更改的)

 

下面这段程序是正确的,我们可以发现,这里只不过是改用数组来接收该字符串

#include<stdio.h>

#include<string.h>

int main()

{

     char a[10]="you arebetter";//

    *a='a';

}

 

然而,这里的情况和上面截然不同,因为在这里,程序在堆区为数组开辟一段空间,而只不过是把字符串常量的值复制到该数组上,这里访问的不再是字符串常量区了,而是堆区中的单元。

值得说明的是,在一个程序中,不管用什么程序中用过几次同一个字符串常量,程序建立一次该常量。

#include<stdio.h>

#include<string.h>

int main()

{

     char  *p="huang";

     char  *pt="huang";

   printf("%d\n",p);

   printf("%d",pt);

}

以上两个输出结果是一样的(当然,好像地址不是这个格式,这里为了简便)。

 

个人拙见,见识有限,有错误请原谅。欢迎交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值