点击打开链接

char *str1 = "hello world" 和 char str2[] = "hello world"; 的区别:

1、内存管理:

内存分为:只读代码段,只读数据段,BSS,堆,栈五个不同区域。

如上图所示:

只读代码段一般存放的是编写好的程序。

只读数据段(常量存储区)放的是常量(字符串常量,数组名称,函数名称),只读区域不能更改!

SS区域(全局/静态存储区)存放的是全局变量和static静态类变量,又分为未初始化,值都为0,和已初始化区域。

堆中存放的是malloc(),calloc()……(new)申请的空间,不由操作系统回收,必须靠程序员自己通过free()回收空间,不然就是内存泄漏!!!

栈中存放的是局部变量,形参变量,栈中空间可被任何函数使用,是数据的可靠性很低!

2、str1是指针变量,str1++; right,指针加减整型,结果还是指针。

对于str2而言,char str2[] = "hello world"; <=>

char str2[] = {‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘ ‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘, ‘\0‘};

这是对字符数组初始化,所以str2是数组名称(指针常量),str2++;false,常量不能赋值!

"hello world"字符串本身就是以'/0'结尾的字符数组!!!

3、"hello world"字符串常量在只读数据段,值本身内容不能被更改!!!

str1为指针变量,*str1 =‘t‘; false,更改的是只读数据段中的区域。

str2为数组名称,其空间在栈中申请,*str2 = ‘t‘; true,栈中的数据可以被更改。

4、对char *str1 = "hello world"的深刻理解

strlen(str1);        //11

strlen(str2);        //11

sizeof(str2);        //12

数组名称,求字节数,是数组所申请的空间的字节数,再加上'/0'结束标志。

sizeof(str1); //4/8 与平台有关,32位系统下,指针4字节;64位,指针8字节

sizeof(*str1); //1    *str1 就是‘h‘,占用一个字节。

sizeof("hello world"); //12   字符串常量所占空间

strlen();函数,求得是字符串长度,不算那个'/0';

sizeof();关键字,单目运算符,求字节数,算字符串的结束标志'/0'。

5、[]中的值,由初值个数决定。

char str1[]="hello";//str1!=str2
char str2[]="hello";
char *str3="hello";//str3==str4
char *str4="hello";

char *str1 和 char str2[]的详解相关推荐

  1. c语言中argc的作用,C语言中 int main(int argc,char *argv[])的两个参数详解

    C语言中 int main(int argc,char *argv[])的两个参数详解 argc是命令行总的参数个数: argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数.命令行后面 ...

  2. 【转载】cocos2d-x类型转换(CCstring int string char UTF-8互转)以及字符串详解

    cocos2d-x中的字符串: <1>:使用 const char* 和 std::string const char* 是C风格的字符串  ,std::string 是C++风格的字符串 ...

  3. C语言的变量类型(int、short、char、float...)及变量类型转换详解

    前言 单片机的基本功能是进行数据处理,而数据在进行处理时需要先存放到单片机的存储器中.所以在编写程序时对变量与常量都要先声明数据类型,以便把不同的数据类型定位到嵌入式处理器的不同存储区中. 具有一定格 ...

  4. C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)

    参考:string.h中常用字符串操作函数说明(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等) 作者:一只青木呀 ...

  5. C 和 C++字符串详解

    From:http://blog.csdn.net/fenxinzi557/article/details/51457829 From:http://www.cnblogs.com/xFreedom/ ...

  6. C++ cin 详解之终极无惑

    代码编译运行环境:VS2017+Win64+Debug. 文章目录 1.简介 2.常用输入方法 2.1 cin>> 的用法 2.2 cin.get() 的用法 2.2.1 cin.get( ...

  7. Linux C 字符串输入函数 gets()、fgets()、scanf() 详解

    一.gets() 函数详解 gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串. 调用格式为: gets(str); 其中str为字符串变量(字 ...

  8. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发

    strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...

  9. 筑基九层 —— 指针详解

    目录 前言: 指针详解 前言: 1.CSDN由于我的排版不怎么好看,我的有道云笔记比较美观,请移步有道云笔记 2.修炼必备 1)入门必备:VS2019社区版,下载地址:Visual Studio 较旧 ...

最新文章

  1. mysql索引教程_MySQL教程96-MySQL索引类型
  2. c++ Resource file and Source file
  3. vue-router的基本使用
  4. 【转/TCP协议编程】 基于TCP的Socket 编程
  5. 【Python】Python处理图像五个有趣场景,很实用!
  6. Istio 自动注入 sidecar 不成功及k8s安装istio后pod无法创建解决方案
  7. Java Windows 环境配置
  8. java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?
  9. java获取s3对象url_java-如何通过SDK设置S3对象的内容类型?
  10. 计算机网络实用技术教学资源,计算机网络实用技术第一章课件教学.ppt
  11. Objective-C(9)内存管理之ARC
  12. linux 按序号创建文件夹,在Linux终端中创建M3U播放列表的方法
  13. Windows 安装配置Java开发环境《jdk8》
  14. win10未能连接网络连接到服务器,win10以太网无法连接网络解决办法
  15. 卫星对地观察模型系统操作说明
  16. 使用vue-giant-tree根据id定位位置
  17. ESXI VIB升级报错
  18. MVC下压缩输入的HTML内容
  19. 19-windows10窗口关闭延迟解决
  20. uni-app学习笔记-实现一个简单统计图(三)

热门文章

  1. win7你没有权限查看或编辑这个对象的权限设置
  2. 高中数学知识点;二次函数与幂函数(高考备考)
  3. 虾皮规模毁约、毁 offer,操作太离谱了...
  4. SAP-READ语句
  5. android 音量 广播,Android平台音量调节(一)音量键调节音量
  6. Neighbourhood Consensus Networks
  7. ntp linux 是什么意思,【NTP】Linux NTP
  8. mysql匿名用户grant_mysql 建库报匿名用户权限错误
  9. Mathematica 和 MATLAB、Maple 并称为三大数学软件
  10. 计算机二级60分容易吗,计算机二级哪个比较容易考