C/C++关键字及运算符的简单用法4

1.sizeof关键字
1.1简单用法
sizeof 为C语言的一个主要关键字,而并非是一个函数,虽然其后经常会跟着一对括号,这就导致许多人认为这是一个函数,进而产生误解。用途:求某一特定的变量、指针、结构体、枚举、联合体等所占内存空间的大小。

1.2示例:

#include<iostream>
using namespace std;

int main()
{
    char str1[]={'h','e','l','l','o'};
    cout<<"str1="<<str1<<endl;
 
    char str2[100]={'h','e','l','l','o'};
    cout<<"str2="<<str2<<endl;
 
    char str3[]="hello";
    cout<<"str3="<<str3<<endl;
 
    cout<<"size of str1="<<sizeof(str1)<<endl;
    cout<<"size of str2="<<sizeof(str2)<<endl;
    cout<<"size of str3="<<sizeof(str3)<<endl;
    return 0;
}

这些基本数类sizeof所求的内存空间大小受到不同系统的约束。例如:在64位系统下,其大小分别为:
输出如下:环境为win10+Dev c++
在这里插入图片描述基本知识:
用{}列举如str1用sizeof为真实长度并没有在末尾添加‘\0’.
但直接写字符串会在末尾添加\n.sizeof的结果会大一个字符。

1.3strlen函数与sizeof的区别
strlen 是一个函数,它用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符)。
看如下代码:

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

int main()
{
    char str1[]={'h','e','l','l','o'};
    cout<<"str1="<<str1<<endl;
 
    char str2[]="hello";
    cout<<"str2="<<str2<<endl;
     
    char str3[100]={'h','e','l','l','o'};
    cout<<"str3="<<str3<<endl;
    
    cout<<"sizeof str1="<<sizeof(str1)<<endl;
    cout<<"sizeof str2="<<sizeof(str2)<<endl;
    cout<<"strlen str2="<<strlen(str2)<<endl;
    cout<<"strlen str3="<<strlen(str3)<<endl;
    cout<<"sizeof str3="<<sizeof(str3)<<endl;
    return 0;
}

在这里插入图片描述由此可以看出:
strlen()得到的是字符串的真实长度,而sizeof是得到字符串在定义时在内存里开辟的大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include<iostream> #include<string> #include<algorithm> #include<cstring> #include<vector> using namespace std; //使用C++的标准名字空间 const int N = 1010; //用关键字const来定义常量 struct BigNum { //定义结构体 BigNum,用于存储大整数 int len; int num[N]; BigNum() { memset(num, 0, sizeof num); len = 0; } BigNum(string str) { memset(num, 0, sizeof num); len = str.length(); for (int i = 0; i < len; i++) { num[i] = str[len - 1 - i] - '0'; } } bool operator < (const BigNum &b) const { // 小于号运算符重载函数,用于比较两个 BigNum 类型的对象的大小 if (len != b.len) { return len < b.len; } for (int i = len - 1; i >= 0; i--) { if (num[i] != b.num[i]) { return num[i] < b.num[i]; } } return false; } bool operator > (const BigNum &b) const { //大于号运算符重载函数,用于比较两个 BigNum 类型的对象的大小 return b < *this; } bool operator <= (const BigNum &b) const { //小于等于号运算符重载函数,用于比较两个 BigNum 类型的对象的大小 return !(b < *this); } bool operator >= (const BigNum &b) const { //大于等于号运算符重载函数,用于比较两个 BigNum 类型的对象的大小 return !(*this < b); } bool operator == (const BigNum &b) const { //等于号运算符重载函数,用于比较两个 BigNum 类型的对象是否相等 return !(*this < b) && !(b < *this); } bool operator != (const BigNum &b) const { //不等于号运算符重载函数,用于比较两个 BigNum 类型的对象是否不相等 return *this < b || b < *this; }这段函数的设计思路是什么?
05-24

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值