注册 登录
编程论坛 C语言论坛

这是一个指向常量的指针还是指向非常量的指针?

b1592187525 发布于 2020-03-09 21:02, 1473 次点击
第一种这样是指向一个非常量的指针吗:
char *p="abcd";


第二种这样是指向一个常量的指针吗:
const char *q="abcd";


以下代码中指针p所指向的值无法被修改,说明指针p指向的值是一个常量。既然这行语句char *p="xzcvbnm";表明指针p指向的值为常量,那要定义一个指向非常量的指针该如何定义呢?
程序代码:
#include"stdio.h"
int main(void){
    char *p="xzcvbnm";
    char *a="jfknejfk";
    for(;*a;p++,a++){
        *p=*a;
        printf("%c",*p);
    }
    *p='\0';
    printf("\n%s",p);
    return 0;
}


[此贴子已经被作者于2020-3-9 22:07编辑过]

3 回复
#2
叶纤2020-03-09 21:17
#3
b15921875252020-03-09 22:17
以下是引用叶纤在2020-3-9 21:17:37的发言:

这个贴已经讲的很清楚了https://bbs.bccn.net/redirect.php?goto=findpost&pid=2719244&ptid=499301

如果要修改指针p所指向的值,只能将p定义成数组的形式了,这样数组的值才是一个非常量的值。
程序代码:
#include"stdio.h"
int main(void){
    int i;
    char p[]="xzcvbnm";
    char *a="jfknejfk";
    for(i=0;*a;i++,a++){
        p[i]=*a;
        printf("%c",p[i]);
    }
    p[i]='\0';
    printf("\n%s",p);
    return 0;
}
#4
叶纤2020-03-09 22:30
你最终想得到什么结果,字符串字面量本身就是一个常量,是一个文本,所以conste char*永远指的是一个常量,不可能指向一个变量,
字符串字面量“”也就是双引号里的内容只能够读取,不可以改变,也就是说你想要改变ch[0]或者ch[1]....是非法的,如果想改变,可以使用字符串而非字符串字面量。我曾经也是把字符串字面量当成字符串来使用,最终被版主们大佬们指正,所以,也不希望你发生类似的错误。
1