sizeof(char)和sizeof(string)的区别

1.例子:

#include <iostream>
#include<string>
using namespace std;

int main()
{
	char a[] = "1234";
	string b = "12345689";
	cout << sizeof(a) << endl;
	cout << sizeof(b) << endl;
	cout<<sizeof(1==2)<<endl;
	return 0;
}

2.结果:

在这里插入图片描述

3.分析:

char a[] = "1234";
对于c串而言,以'\0'结尾,因此该串就是5char的元素组成
一个char1个字节
故
sizeof(a) = 5 

sizeof(string)

而对于string

无论你的string里放多长的字符串,它的sizeof()都是固定的,
字符串所占的空间是从堆中动态分配的,与sizeof()无关。

sizeof(b) = 32 ;其实是编译器为string分配的空间

4.sizeof()的定义

The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.

sizeof是一个关键字,以字节位单位,
给出变量或者类的内存大小,也就是占多少个字节)
它不是一个函数!!!!可以不加括号

5.特殊case

#include <iostream>
#include<string>
using namespace std;

int main()
{
	int a = 0;
	cout<<sizeof(a=3)<<endl;
	cout<<a<<endl;
	return 0;
}

输出结果
在这里插入图片描述
为什么第二行输出为0? 而不是3 ? 原因?:

由于sizeof不能被编译成机器码,所以sizeof作用范围内,
也就是()里面的内容也不能被编译,而是被替换成类型。
=操作符返回左操作数的类型,所以a=3相当于int
,而代码也被替换为:
cout<<sizeof(int)<<endl;

6.常见的一些case

#include <iostream>
#include<string>
using namespace std;

int main()
{
	char a[] = "abcd"; // 5
	int b[20] = {3, 4}; // 20*4 = 80 
	char c[2][3] = {"aa", "bb"}; // 2*3 =6
	cout<<sizeof(a)<<endl; // 
	cout<<sizeof(b)<<endl; //
	cout<<sizeof(c)<<endl; //
}

在这里插入图片描述

7.对于指针

sizeof(ptr) 取决于32位系统还是64位系统

#include <iostream>
#include<string>
using namespace std;

int main()
{
	int *d = new int[10];
	cout<<sizeof(d)<<endl; //8,此时是64位系统
	double* (*a)[3][6];
	cout<<sizeof(a)<<endl;   // 8
	cout<<sizeof(*a)<<endl;   // 144
	cout<<sizeof(**a)<<endl; // 48
	cout<<sizeof(***a)<<endl; // 8
	cout<<sizeof(****a)<<endl; // 8
	return 0;
}

分析:

a是指向数组double(*) [3][6]的指针,
故sizeof(a) = 8;
*a 就是指针指向的对象,数组名,
sizeof(*a) = 18 * 8 = 144
后面的解释不来,这个不会...
花里胡哨的东西

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值