C语言学习Day6

  • 指向字符表面的变量无法修改其中的内容,而用于存放字符表面值的数组可以,例如
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[]的含义:
  1. 一般情况下,是变量声明,未给出大小的情况下,需要立即对其赋值
  2. 如果作为一个函数的参数出现,是指针
void stack_deck(char cards[])
{
...
}
//上下两种写法等效
void stack_deck(char *cards)
{
...
}

  • 如果想要指针指向字符串值,请加上const关键字,这样会提示明确的错误信息
const char *s = "some string"

内存存储器结构(各层顺序如列表所示):

  • 终止地址
  • 栈stack:局部变量存储位置,先进后出
  • 堆heap:用于动态存储
  • 全局变量globals:程序首次运行时创建,可更新
  • (只读内存)常量constants:程序首次运行时创建,只读
  • (只读内存)代码code:只读
  • 起始地址

猜你喜欢

转载自blog.csdn.net/sinat_37012750/article/details/86301446