申祷无
2016-05-14 05:20
采纳率: 73.2%
浏览 2.7k

为什么用 char *s = "test" 定义的 C语言字符串不能使用下标?

char *s = "test";
s[1] = 'E';

用 char s[] = "test" 就能使用下标了,这两种是不一样的吗?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

10条回答 默认 最新

  • feiyu2046 2016-05-14 05:28
    已采纳

    不一样的,第一种里面“test”是字符串常量,存储在文本区,而s只是一个指针;第二种是局部变量,用来初始化s字符数组,存储在栈区

    已采纳该答案
    打赏 评论
  • liu800141 2016-05-14 05:58

    char *s = "test";

    s是指向字符常量的指针,字符常量是不能改变其值的,可以使用下标访问该字符常量,但不能对其进行赋值操作

    char ss[] = "test"; // 字符数组赋值的一种方式
    ss是一个字符数组,可以使用下标访问并对其做赋值操作

    打赏 评论
  • cppfriends 2016-05-14 06:00

    原因:因为定义的不是数组,不能用访问数组元素[]的方式访问。
    答案:可以这样访问:

    ++++++++++++++++++++++++++++++++++++++++++++++++++++
    char *pc ="test";
    const char *ps = "test";
    char cArray[] = "test";

        printf ("pc+1: %c\n",*(pc+1) );
        printf ("ps+1: %c\n",*(ps+1) );
        printf ("cArray[1]:%c\n", cArray[1]);
    

    ++++++++++++++++++++++++++++++++++++++++++++++++++++

    打赏 评论
  • cppfriends 2016-05-14 06:23

    // 以下代码在gcc版本:
    // gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2)
    // 编译运行Ok
    // 这个跟C编译器也有关系,所以不能一概而论啊。

    #include

    int main(void)
    {
    char c;
    char *pc ="test";
    const char *ps = "test";
    char cArray[] = "test";

        printf ("pc+1: %c\n",pc[1] );
        printf ("pc+1: %c\n",*(pc+1) );
        printf ("ps+1: %c\n",*(ps+1) );
        printf ("ps+1: %c\n",ps[1] );
        printf ("cArray[1]:%c\n", cArray[1]);
        printf ("cArray+1:%c\n", *(cArray+1) );
    
    
        return 0;
    

    }

    // 运行结果:
    pc+1: e
    pc+1: e
    ps+1: e
    ps+1: e
    cArray[1]:e
    cArray+1:e

    打赏 评论
  • shiter 2016-05-14 09:24

    是时候放出赵老师的名言了,不要迷信书,要迷信编译器
    这个[]编译器对于类似char* 这样的没办法解析地址

    打赏 评论
  • 恋恋西风 2016-05-14 10:22

    const char *ps = "test";
    char cArray[] = "test";

    第一个是指针,只能以访问地址的方式去访问 printf ("pc+1: %c\n",*(pc+1) );
    第二个是数组,当然可以用下标的方式访问;

    打赏 评论
  • QuantumEnergy 2016-05-14 10:45

    指针只是指向该字符串存储地址的开始位置。 只是一个指向地址的变量。

    打赏 评论
  • 毕健 2016-05-14 15:29

    学习学习。图片说明

    打赏 评论
  • eternity1118_ 2016-05-15 02:31

    不一样,指针在栈里,

    打赏 评论
  • 六点的车 2020-12-17 08:53

    字符串常量不可以修改

    打赏 评论

相关推荐 更多相似问题