码迷,mamicode.com
首页 > 编程语言 > 详细

深入理解 C/C++ sizeof() 运算符

时间:2020-02-11 14:39:11      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:amp   code   环境   include   共用体   内容   空间   space   turn   

过去有一段时间一直以为带个括号的 sizeof() 是 C/C++ 的原生函数QAQ。

其实不然,sizeof 同位运算符(^|&~!)一样是一种单目运算符,作用于变量或数组。

在编译时编译器就会把 sizeof() 的内容转换成常数存入机器码中,不涉及函数的底层操作。

用途

sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。

使用 sizeof 的语法如下:

sizeof (data type)

其中,data type 是要计算大小的数据类型,包括类、结构、共用体和其他用户自定义数据类型。

sizeof 与 普通变量

#include<bits/stdc++.h>
using namespace std;
int main() {
    char char_var;
    float float_var;
    double double_var;
    long double ldouble_var;
    int int_var;
    long long ll_var;

    printf("sizeof char = %d\n",sizeof(char_var));
    printf("sizeof float = %d\n",sizeof(float_var));
    printf("sizeof double = %d\n",sizeof(double_var));
    printf("sizeof long double = %d\n",sizeof(ldouble_var));
    printf("sizeof int = %d\n",sizeof(int_var));
    printf("sizeof long long = %d\n",sizeof(ll_var));   
    return 0;
} 

输出结果:

sizeof char = 1
sizeof float = 4
sizeof double = 8
sizeof long double = 16
sizeof int = 4
sizeof long long = 8

可以看出,编译器把 sizeof 的内容都替换成了变量占用的空间大小(单位为字节)。

此外,作为一个运算符,在 sizeof 之后的变量名可以不用括号括起来,这样在概念上就不会和函数混淆了。

sizeof 与 指针变量

#include<bits/stdc++.h>
using namespace std;
int main() {
    char *char_point;
    double *double_point;
    int *int_point;
    long long ll_point;

    printf("sizeof pchar = %d\n",sizeof(char_point));
    printf("sizeof pdouble = %d\n",sizeof(double_point));
    printf("sizeof pint = %d\n",sizeof(int_point));
    printf("sizeof plong long = %d\n",sizeof(ll_point));    
    return 0;
} 

输出结果:

sizeof pchar = 8
sizeof pdouble = 8
sizeof pint = 8
sizeof plong long = 8

所有类型的指针变量在32位环境中占用四字节,在64位环境中占用八字节。
我的编译器是x64(64位)的,如果是x86编译器(32位)下输出结果应该是4。

sizeof 与 数组

#include<bits/stdc++.h>
using namespace std;
int main() {
    char char_arr[10]="233";
    double double_arr[10]={0.0};
    int int_arr[10]={0,1,2,3,4,5,6,7,8,9};
    long long ll_arr[10];
    
    printf("sizeof arrchar = %d\n",sizeof(char_arr));
    printf("sizeof arrdouble = %d\n",sizeof(double_arr));
    printf("sizeof arrint = %d\n",sizeof(int_arr));
    printf("sizeof arrlong long = %d\n",sizeof(ll_arr));    
    return 0;
} 

输出结果:

sizeof arrchar = 10
sizeof arrdouble = 80
sizeof arrint = 40
sizeof arrlong long = 80

深入理解 C/C++ sizeof() 运算符

标签:amp   code   环境   include   共用体   内容   空间   space   turn   

原文地址:https://www.cnblogs.com/zhwer/p/12294903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!