char *a 与char a[]所占空间解析

在分析之前,我们先熟悉下在16位、32位、64位下指针类型 与char类型所占空间
     16位        32位       64位
char 1           1          1
指针  2           4          8(我们在有的编译环境下面sizeof出来是4 是因为编译器为了编译32位机器代码而做的妥协,按道理上是8位)

ok,让我们开始测试并分析如下各种情况

如下

假设我们的程序(64位机器)如下:

void countsize(char a[])
{  cout<< sizeof a ;  }
int main(){char a[]="hello";char *b = "hello";char c[10]="hello";
}

siezeof(a)==6, sizeof(b)==4, sizeof( *b)==1, sizeof(c)=10
因为a的结尾还有一个字符串结束符’\0’所以一共有6个字节
同时 b是一个指针 无论如何都是4, 但是*可以理解为一个地址类型,b才存放着另外一个变量的地址所以输出为1
,c已经指定了大小 则输出为10.

特别有意思的是 countsiz(a)==4 countsize(b)==4 countsize(c)==4 其实coutsize(char a[])与coutsize(char *a)是一样的,它是不会为你记录数组的大小,而是传入了地址参数。

关于字符数组的长度问题(sizeof与strlen)

strlen
 strlen函数遇到'\0'结束统计并返回。
    char chs0[7] = {'a', 'c', '0', 'z', '3','d'}; // 长度为6, 在末尾自动加上了'\0'char chs1[7] = {'a', 'c', '0', 'z', '3','d', '/0'}; // 长度为6char chs2[] = {'a', 'c', '0', 'z', '3','d', '/0' }; // 长度为6char chs3[] = {'a', 'c', '0', 'z', '3','d'}; // 长度未知,因为数组最后没有结束符'/0'char chs4[6] = {'a', 'c', '0', 'z', '3','d'}// 长度未知,因为数组最后没有结束符'/0'

char c[]={‘c’, ’ ‘,’p’,’r’,’o’,’g’,’r’,’a’,’m’};

可写为:

char c[]={“C program”};

或去掉{}写为:

char c[]=”C program”;

用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志’/0’。

sizeof
   sizeof就是计算所占字节长度
如果有错误欢迎指正 感谢 比心

char *a 与char a[]所占空间解析题相关推荐

  1. C语言数据类型所占空间大小

    C语言数据类型所占空间大小 /* * datasize.c -- print the size of common data items * This runs with any Linux kern ...

  2. 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const

    原文网址:http://www.cnblogs.com/rushuizhijing/archive/2011/08/26/2154737.html 深入理解const char*p,char cons ...

  3. char a[]和char *a的比较,数组名,数组首地址,a,a,a[0]

    char a[]和char *a的比较 指针和数组存在着一些本质的区别.当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作为函数参数传递进来的指 ...

  4. c语言char aa 1000,char ** 与char * a[ ] 区别

    先看 char  *a [ ] ; 由于[ ] 的优先级高于* 所以a先和 [ ]结合,他还是一个数组,数组中的元素才是char * ,前面讲到char * 是一个变量,保存的地址.. 所以 char ...

  5. 【C++】关于char * tempbuffer = new char[100];

    今天做作业写代码写到了以下语句 char * tempbuffer = new char[100] 该句代码的意思是定义了一个字符指针,指向一个内存大小为100字节的内存空间(在C++里,char占1 ...

  6. 编程当中 %lg 是什么? (编程语言常见数据类型与占位符的关系以及所占空间的大小)

    编程常见的数据类型和占位符的对应关系: 数据类型                        占位符                         所占空间大小 char / unsigned c ...

  7. char *str1 和 char str2[]的详解

    点击打开链接 char *str1 = "hello world" 和 char str2[] = "hello world"; 的区别: 1.内存管理: 内存 ...

  8. char *s和char s[]的区别与联系以及strlen()和sizeof()的用法

    #include<iostream> using namespace std;void reverse(char s[]) {char *p, *q, temp;p = s;//p指向字符 ...

  9. C语言计算出结构体所占空间大小

    第一次写博客,而且是一个小萌新,有什么错误的地方请各位大佬及时提出来,我会立即更改,最后希望这篇文章能对你有帮助 大家对用struct关键字创建一个结构体应该不陌生,但是我们创建的结构体的空间大小怎么 ...

最新文章

  1. mysql字符集变为gbk_MYSQL数据库默认latin1字符集转换为GBK或UTF8
  2. 【数据结构与算法】二叉树结点最小深度求解算法
  3. Linux 进程地址空间 进程内存布局
  4. LINQ学习中需要明确的几点问题
  5. 【BZOJ 3652】大新闻 数位dp+期望概率dp
  6. Windows Kernel Programming Windows内核编程(一)
  7. 关于java架构心得
  8. 表格筛选后复制粘贴方法
  9. 重庆市打造集感知、分析、指挥“五位一体”的智慧城管系统
  10. 小学-知识与能力【5】
  11. MSP430 F5529 单片机 串口 万年历 电子时钟 数字时钟 Digital clock
  12. 集团税务共享化、数字化系统如何选型(一)
  13. web1.0、web2.0与web3.0
  14. 图表Chart.js入门教程
  15. 压缩打包命令---tar
  16. unity 求出物体所在相机的横截面 解决调整 field Of View后场景物体和UI不匹配
  17. ssm项目——教务系统
  18. Android基础知识——Android SDK Manager详解
  19. 如何健壮你的后端服务?
  20. FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学

热门文章

  1. 如何让C盘可用空间变大
  2. QMS-云质-质量管理软件-什么是企业质量知识库?
  3. php 图片印章_在线生成实用又方便 (图片印章)
  4. 基于稀疏表示的分类方法 Sparse Representation based Classification Method
  5. WZOI-359字符串哈希
  6. [原创]分析某app直播地址的过程
  7. 软件测试登陆注册经典测试用例
  8. Windows 取证之ShellBags
  9. Android Studio 往虚拟机添加音乐
  10. iOS App签名的原理