C 字符数组 与 字符串常量

在 C 语言中,有两种表示字符串的方法

  1. 字符串数组 char str[6]="123456";
  2. 字符串常量 char *str="123456";

字符数组

#include <stdio.h>
int main(int argc, const char * argv[]) {
    char str[6]="123456";
    //%x ,十六进制
    printf("%x\n",&str);
    printf("%x\n",str);
    printf("%x\n",&str[0]);
    return 0;
}

输出结果如下:

5fbff849    
5fbff849
5fbff849
表达 解释
&str str[6]=...时已为分配了6字节的内存地址给 str 数组,打印出的是首字符的内存地址
str 可以理解成数组变量退化的指针,并且指向数组的开头
&str[0] 数组中第一个字符的内存地址

字符串常量

#include <stdio.h>
int main(int argc, const char * argv[]) {
    char *str;
    str="123456";
    //
    //等价
    //char *str="123456";
    //
    printf("%x\n",&str);
    printf("%x\n",str);
    printf("%x\n",&str[0]);
    return 0;
}

输出结果如下

5fbff848
f92
f92
表达 解释
&str char *str="123456" , 声明了一个 char 类型的指针变量,该指针指向存放"123456"内存地址,所以该指针变量的地址跟下面两个不一样
str 指针变量所指地址空间的内存地址
&str[0] 数组中第一个字符的内存地址

区别

方式 存储位置 权限
字符数组 全局数据区或栈区 读取,写入
字符串常量 常量 读取

推荐阅读更多精彩内容