A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mr.Yan 中级黑马   /  2015-11-22 23:38  /  1689 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);     //运行会出错,用指针定义不能更改某个元素,只能更改指向,即指向别的地址
/*

总结:当用数组定义字符串的时候,因为存储在栈区,所以可以对其进行更改;
而当用指针对其进行定义的时候,因为分配的地址在常量区,不可更改.如欲更改,只能重新选择指向,即更改所指向的地址.

6 个回复

倒序浏览
学习学习
回复 使用道具 举报
学习中,谢谢
回复 使用道具 举报
这是笔记吗
回复 使用道具 举报
wkop 来自手机 中级黑马 2015-11-24 07:35:08
报纸
总结的不错
回复 使用道具 举报
加油不错哦加油不错哦!
回复 使用道具 举报
写的不错继续加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马