关于Char *a与Char a[]中变量占用空间的大小(Windows 7 32位)

分类专栏: C++ (CPP) 文章标签: 面试
去面试时几家公司很爱在char *和char []上做文章,很基础也容易犯错。面试题里很喜欢折腾这些内容,在这里简单的做个比较。如果有错误,请指正。
1、Test 1//字符数组大小未指定大小,指针变量操作数没有类型
#include
int main()
{
using namespace std;
char a[]=" hello world\n";
char *b=" hello world\n";
cout<<“size of array = “<<;
cout<<” bytes.\n”;
cout<<“size of pointer = “<<sizeof b; cout<<” bytes.\n”;
return 0;
}
当字符数组未指定大小时,数组占用的空间其实就是数组内字符所占用的空间,一个字符一个字节。注意“hello”前面的空格,数组结尾还有一个“\o”,所以sizeof a的结果是14个字节。只要是求指针的大小的时候,它的值都是4,不管指针定义的类型。
图:在这里插入图片描述

2、Test 2//字符数组大小指定,指针变量操作数有类型
#include
int main()
{
using namespace std;
char a[20]=" hello world\n";
char *b=" hello world\n";
cout<<“size of array = “<<sizeof a;
cout<<” bytes.\n”;
cout<<“size of pointer = “<<sizeof *b;
cout<<” bytes.\n”;
return 0;
}
当字符数组指定大小时,数组占用的空间就是它指定大小。char a[]指定的大小是20,所以它占用的空间就是20字节。若指针变量前有类型时,其结果等于1。*可以理解为一个地址类型,b才存放着另外一个变量的地址。
图:在这里插入图片描述

3、Test 3//换种方式
#include
using namespace std;
void countsize(char a[])
{
cout<< sizeof a ;
}
int main()
{
char a[20]=" hello world\n";
char *b=" hello world\n";
cout<<“size of array = “;
coutsize(a); cout<<” bytes.\n”;
cout<<“size of pointer = “<<sizeof b;
cout<<” bytes.\n”;
return 0;
}
之前在Test 1中main函数sizeof a得到的是14,用coutsize函数输出的结果会是多少呢?结果是4,会吃惊吗?其实coutsize(char a[])与coutsize(char *a)是一样的,它是不会为你记录数组的大小,而是传入了地址参数。
图:在这里插入图片描述
转载:https://blog.csdn.net/eimundio/article/details/7832341感谢原创分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值