- 指向字符表面的变量无法修改其中的内容,而用于存放字符表面值的数组可以,例如
char *cards="JQK";//在只读内存中创建不可更改
char cards[]="JQK";//可以更改
- 解决方案:使用备份
char cards[]="JQK";
- char *cards=“JQK”;与char cards[]=“JQK”;比较
char *cards="JQK";
1. 加载字符,存入只读内存中
2. 在栈中创建指针变量
3. 指针变量指向字符
4. 计算机运行代码,读取值,报错
char cards[]="JQK";
1. 加载字符,存入只读内存中
2. 根据字符串长度在栈中创建数组
3. 初始化数组,复制字符串表面值存入其中
4. 计算机运行代码,读取值,成功
- char cards[]的含义:
- 一般情况下,是变量声明,未给出大小的情况下,需要立即对其赋值
- 如果作为一个函数的参数出现,是指针
void stack_deck(char cards[])
{
...
}
//上下两种写法等效
void stack_deck(char *cards)
{
...
}
- 如果想要指针指向字符串值,请加上const关键字,这样会提示明确的错误信息
const char *s = "some string"
内存存储器结构(各层顺序如列表所示):
- 终止地址
- 栈stack:局部变量存储位置,先进后出
- 堆heap:用于动态存储
- 全局变量globals:程序首次运行时创建,可更新
- (只读内存)常量constants:程序首次运行时创建,只读
- (只读内存)代码code:只读
- 起始地址