C++中sizeof()、size()、strlen()、length()详解
时间:2024-04-15 12:05:20 来源:网络cs 作者:胡椒 栏目:卖家故事 阅读:
阅读本书更多章节>>>>
1、size 是一个函数,它是在程序运行时才会计算,用来求数组或容器中元素的个数。
在字符串string中它与length的作用相同,只是length只能应用于string中,而不能应用于STL的容器中
2、sizeof 为运算符,其结果是求对应参数的字节大小,它的值是在编译的时候就计算完成了。所以它不能用来计算动态分配内存空间的大小。
两者关系:size(某数组)=sizeof(某数组)/size(数组类型)
3、strlen是函数,在程序运行时才会执行计算。其参数必须时字符型指针(char *)。当以字符数组名作为参数传入时,实际上字符数组就退化成指针了。该函数会返回字符串的长度,该长度不包含结尾的结束标志\0
4.length是一个函数,C++中length()函数只能用来获取字符串长度,不包括\0。
案例1:size()或sizeof()求数组元素个数、字节大小
#include <iostream>#include <numeric>using namespace std;int main() {//整型数组 int num[5] = {1, 2, 3, 4, 5}; cout << "num=0x" << num<< endl //输出为起始内存地址,num+1为数组初始地址+数据大小,逐个输出要for循环num[i] << "sizeof(int)=" << sizeof(int)<<endl //sizeof运算符用于求数据类型或变量占用的内存空间 << "sizeof(num)=" << sizeof(num) << endl << "size(num)= "<< size(num) << endl << "sizeof(num) / sizeof(int)="<< sizeof(num) / sizeof(int) << endl<<endl;//字符串数组 string character1[6] = {"1", "5a", "6", "6","l"}; // string类型,32位占4G,64位占1G cout << "character1=0x" << character1<< endl //输出为起始内存地址 << "sizeof(string)=" << sizeof(string) << endl //字符串(string)不是C++的基本数据类型,用sizeof求它占用内存的大小没有意义 << "sizeof(character1)=" << sizeof(character1) << endl << "size(character1)= " << size(character1) << endl << "sizeof(character1) / sizeof(string)=" << sizeof(character1) / sizeof(character1) << endl<<endl;//字符数组 char character2[5] = {'1', 'a', 'b', 'a5','5\0'};//超出只保留最后一位,且没有"\0"会一直寻找直至找到"\0",导致内存疯狂占用,所以数组每次使用前进行初始化 cout << "character2=" << character2 << endl << "sizeof(char)=" << sizeof(char) << endl << "sizeof(character2)=" << sizeof(character2) << endl << "size(character2)= " << size(character2) << endl << "sizeof(character2) / sizeof(string)=" << sizeof(character2) / sizeof(character2) << endl; }
执行结果:
num=0x000000186F0FF548sizeof(int)=4sizeof(num)=20size(num)= 5sizeof(num) / sizeof(int)=5character1=0x000000186F0FF580sizeof(string)=40sizeof(character1)=240size(character1)= 6sizeof(character1) / sizeof(string)=1character2=1ab5sizeof(char)=1sizeof(character2)=5size(character2)= 5sizeof(character2) / sizeof(string)=1
案例2:sizeof()求字符串长度
#include <iostream>#include <numeric>#include<iomanip>using namespace std;int main() { //浮点型 float float1 = 0.568416996;//超出部分四舍五入,32位系统下,6~7位有效数字,6精度可以保证 double double1 = 0.23564876824368;//32位系统下,15~16位有效数字,15精度可以保证 long double ldouble1 = 36.256523564876824368; cout << "float1=" << float1 << endl // cout默认六位精度 << "float1=" << setprecision(8) << float1 << endl // 改成8精度,使用setprecision,头文件#include<iomainip>,但第7位后就会出现错误 << "float1=" << fixed << setprecision(9)<< float1 // 加了fixed意味着是固定点方式显示,所以这里的精度指的是小数位6位 << " sizeof(float1)=" << sizeof(float1) << endl << endl; // cout默认六位精度 cout << "double1=" << double1<< endl << "float1=" << setprecision(8) << double1<< endl << "float1=" << fixed << setprecision(6) << double1 << " sizeof(double1)=" << sizeof(double1) << endl << "ldoble1=" << ldouble1 << " sizeof(1double1)=" << sizeof(ldouble1)<<endl //long double的小数点控制同上 << endl; //字符、字符串 string string1 = "wp#@"; char char1 ='W'; cout << "string1="<<string1<<endl << "size(string1)=" << size(string1) << endl << "sizeof(string1)=" << sizeof(string1) <<endl<<endl//输出4*7=28,单个字符占7位,string内存位不固定? << "char1=" << char1 << endl // size不能用于非数组非容器,string可用 << "size(char1)=" << sizeof(char1) << endl;}
输出结果:
float1=0.568417float1=0.56841701float1=0.568417013 sizeof(float1)=4double1=0.235648768float1=0.23564877float1=0.235649 sizeof(double1)=8ldoble1=36.256524 sizeof(1double1)=8string1=wp#@size(string1)=4sizeof(string1)=40char1=Wsize(char1)=1
阅读本书更多章节>>>>
本文链接:https://www.kjpai.cn/gushi/2024-04-15/158933.html,文章来源:网络cs,作者:胡椒,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。