char *a 与char a[]所占空间解析题
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[]所占空间解析题相关推荐
- C语言数据类型所占空间大小
C语言数据类型所占空间大小 /* * datasize.c -- print the size of common data items * This runs with any Linux kern ...
- 深入理解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 ...
- char a[]和char *a的比较,数组名,数组首地址,a,a,a[0]
char a[]和char *a的比较 指针和数组存在着一些本质的区别.当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作为函数参数传递进来的指 ...
- c语言char aa 1000,char ** 与char * a[ ] 区别
先看 char *a [ ] ; 由于[ ] 的优先级高于* 所以a先和 [ ]结合,他还是一个数组,数组中的元素才是char * ,前面讲到char * 是一个变量,保存的地址.. 所以 char ...
- 【C++】关于char * tempbuffer = new char[100];
今天做作业写代码写到了以下语句 char * tempbuffer = new char[100] 该句代码的意思是定义了一个字符指针,指向一个内存大小为100字节的内存空间(在C++里,char占1 ...
- 编程当中 %lg 是什么? (编程语言常见数据类型与占位符的关系以及所占空间的大小)
编程常见的数据类型和占位符的对应关系: 数据类型 占位符 所占空间大小 char / unsigned c ...
- char *str1 和 char str2[]的详解
点击打开链接 char *str1 = "hello world" 和 char str2[] = "hello world"; 的区别: 1.内存管理: 内存 ...
- char *s和char s[]的区别与联系以及strlen()和sizeof()的用法
#include<iostream> using namespace std;void reverse(char s[]) {char *p, *q, temp;p = s;//p指向字符 ...
- C语言计算出结构体所占空间大小
第一次写博客,而且是一个小萌新,有什么错误的地方请各位大佬及时提出来,我会立即更改,最后希望这篇文章能对你有帮助 大家对用struct关键字创建一个结构体应该不陌生,但是我们创建的结构体的空间大小怎么 ...
最新文章
- mysql字符集变为gbk_MYSQL数据库默认latin1字符集转换为GBK或UTF8
- 【数据结构与算法】二叉树结点最小深度求解算法
- Linux 进程地址空间 进程内存布局
- LINQ学习中需要明确的几点问题
- 【BZOJ 3652】大新闻 数位dp+期望概率dp
- Windows Kernel Programming Windows内核编程(一)
- 关于java架构心得
- 表格筛选后复制粘贴方法
- 重庆市打造集感知、分析、指挥“五位一体”的智慧城管系统
- 小学-知识与能力【5】
- MSP430 F5529 单片机 串口 万年历 电子时钟 数字时钟 Digital clock
- 集团税务共享化、数字化系统如何选型(一)
- web1.0、web2.0与web3.0
- 图表Chart.js入门教程
- 压缩打包命令---tar
- unity 求出物体所在相机的横截面 解决调整 field Of View后场景物体和UI不匹配
- ssm项目——教务系统
- Android基础知识——Android SDK Manager详解
- 如何健壮你的后端服务?
- FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学