最近写程序的时候一直在用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所指向的空间中存放的是常量,不能修改。
不知道理解的对不对,不对的话希望能给我指出来,有详细解释的就更好了。嘿嘿……