C中对字符串和指针的理解

最近写程序的时候一直在用C,这过程中也发现了自己不少问题。

#include <stdio.h>
main()
{
char ch[9];
char *q;
scanf("%s",ch);
q = ch + 2;
q[3] = 'y';
printf("q = %s\n\n",q);
printf("%s\n",ch);
}

在上面的代码中,如果改变q数组(暂且成为数组)中的某个值,那么ch中相应的值也会改变。

个人理解:因为q只是一个指针,它指向ch数组中的某个值的地址,系统并没有给它分配空间,所以改变q中的值也就是改变ch中的值。


#include <stdio.h>
main()
{
char *p = "asdfasdf";
char *q;
q = p + 2;
q[3] = 'y';
printf("q = %s\n\n",q);
printf("p = %s\n",p);
}

在这段代码中,在试图改变q值的时候会出现错误,调试过程中显示为“Unhandled   exception   in   ***.exe:   0xC0000005:   Access   Violation"。

我认为是因为p所指向的空间中存放的是常量,不能修改。



不知道理解的对不对,不对的话希望能给我指出来,有详细解释的就更好了。嘿嘿……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值