首页 > 代码库 > 指针和字符串常量

指针和字符串常量

指针和字符串常量

首先比较两段代码

代码1

    char ch1[] = "hello";
    *ch1 = 'H';            //OK
    ch1[0] = 'H';          //OK
    printf("%s\r\n",ch1);

代码2

    char *ch2 = "world";
    *ch2 = 'W';            //运行时错误
    ch2[0] = 'W';          //运行时错误
    printf("%s\r\n",ch2);

这里的“world”是字符串常量,而“hello”不是。

代码2里,*ch2和ch2[0]其实就是指‘w’,而‘w’是常量自然无法修改!

一般定义成 const char * = “world”;避免上述运行时的错误。

如果想修改字符串的值,就应该定义成代码1的形式!或者如下在堆上申请:

    char *s = (char *)malloc(sizeof(char)*6);
    strcpy(s, "hello");
    s[0] = 'H';
    printf("%s\r\n", s);
这个“hello”也不是一个字符串常量,因为是在堆上申请的,也可以用指针来读和写!

指针和字符串常量