在 C 语言中,有两种表示字符串的方法
- 字符串数组 char str[6]="123456";
- 字符串常量 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] | 数组中第一个字符的内存地址 |
区别
方式 | 存储位置 | 权限 |
---|---|---|
字符数组 | 全局数据区或栈区 | 读取,写入 |
字符串常量 | 常量 | 读取 |