C语言字符指针访问

      因为一道面试的题目,所以抓来了谭浩强的《C语言程序设计》翻了下,其中谭老师在240页10.22例中,字符指针指向的字符,可通过像字符数组,使用[]来访问,即:   char * a = “I love china”;

printf("The sixth charcter is %c\n",a[5]);

    我便突发奇想,可否通过字符指针来改变其指向的内容,即

VS2005的环境下,便会出 “0xC0000005: 写入位置 0x00418bf0 时发生访问冲突”,而如果写成如下,则可正常执行

也就是说,通过字符指针对字符数组进行“写操作”是允许的,而之前的错误又是一个运行错误,类似与XCODE里的EXC_BAD_ACCESS的错误,猜测可能的原因是指定字符指针并直接用字符串初始化,所开辟的内存空间,并非栈上的空间  是const 指针引出的错误,所以若有“char * a = “I love china”;”的用法,因写成“const char * a = “I love china”;”,这样当编译“写操作”代码是,编译器便会报错。同时,求教“char * a = “I love china”;”的内存空间。

这里是这个问题的答案http://blog.csdn.net/defonds/article/details/6260429

“因此 C++ 中的字符串字面量才可称为字符串常量,而且首地址及各元素地址跟C一样,都是地址常量表达式。
        字符串字面量在C中具有数组类型 char[N],在 C++ 中则为 const char[N],在表达式中当发生数组到指针的转换时,对应的等效指针类型分别是 char* 和 const char*,因此,在 C 中,char *p = “ABCDEF” 是合法的,但让人惊奇的是,上述语句在 C++ 中也是合法的!看起来一个 pointer to const char 指针被赋予了 pointer to char 指针,似乎违反了 C++ 中指针转换的 more cv-qualified 原则。其实字符串字面量在 C++ 中存在两种转换,一种转换依据当前上下文环境,另一种遵循数组到指针的转换,C++ 标准的内容:”
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值