指向字符串的指针的定义问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

指向字符串的指针的定义问题

a123456678 2016-06-07 20:30:55 1134

char* pt = "hello world!";

char *pt[] = "hello world!";
这两个有什么区别

分享到
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:31:00

    两种写法都是不正确(不标准)的写法。

    前者的标准写法:

    const char *pt = "hello world!";
    这种写法字符串被存储在静态存储区,整个程序内都可以使用,因为是 const, 所以不能修改。

    后者的标准写法:

    char pt[] = "hello world!";
    这个字符串会在运行时在栈上分配空间,超出作用域内存即被释放,可以修改,长度取决于后面的字符串(编译时计算)。

    回应 @小_秦 的质疑:

    你可以在任何现代的编译器上编译你写的下面这行代码:

    char *p = "Hello World!";
    并开启编译器的所有警告,你会收到这样的警告(我的编译器是 Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)):

    warning: conversion from string literal to 'char *' is deprecated [-Wc++11-compat-deprecated-writable-strings]
    解决这个警告的办法就是如我前面所说,把 char 改成 const char . 我上面用的是 C++ (我看你用的也是 C++),在 C 语言里可能不会出现这个警告,但因为字符串字面量存储在静态存储区,该地址被整个程序的所有相同字符串字面量共享,所以 pt 从语义上必须是只读的,即必须 const.

    关于我说的「整个程序内都可以使用」是指 pt 所指向的内存地址(你可以将这个地址保存在一个全局变量里,当你离开了这个函数,你依然可以使用),而不是 pt 这个符号

    0 0
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章