int main(){
//定义字符串 有几种方式
//1. 字符数组定义字符串
char str[10] = "apple"; //0x7fff58ee7bc6 ---> 0x7f 栈区
//2. 指针定义字符串
char *str1 = "apple"; //0x106d18f92 ----> 0x10 常量区 : 内容不可改
//区别:
//1. 内存的存储区域不同
//2. 指针变量能直接改变指向
str1 = "baidu"; // 指针的"指向"发生了改变
// str = "baidu"; // 数组名是常量 //错误的
strcpy(str,"baidu"); //通过字符串函数 可以赋值
//3.scanf方式初始化
// scanf("%s",str); // 字符数组创建的字符串 可以通过 scanf进行 初始化
//
//
// scanf("%s",str1); // 指针变量 创建的字符串 不能通过scanf 初始化
//4. 能否修改字符串内部的内容
str[4] = 'x'; //可以改变 栈区 通过数组 数组元素
// str1 ---> "apple" 这个字符串的首地址 'a'-> 的地址
*(str1+4) = 'x';
printf("%s--%s\n",str,str1); //运行会出错,用指针定义不能更改某个元素,只能更改指向,即指向别的地址
/*
总结:当用数组定义字符串的时候,因为存储在栈区,所以可以对其进行更改;
而当用指针对其进行定义的时候,因为分配的地址在常量区,不可更改.如欲更改,只能重新选择指向,即更改所指向的地址.
|
|