小结——sizeof()的用法

在C语言中sizeof()是一种单目操作符,用于表示相关数据的字节个数,并非是函数;编译器在进行转汇编之前就已经对其处理,将sizeof(type)计算为一个常数。所以sizeof(type)等同于一个常数

比如:“int a=sizeof(int);"“int a=4;”在汇编和机器码上是一模一样的。所以,在嵌入式中如果有人想通过用常数替换sizeof(type)来降低软件负载,可就白费力气了。

下面为大家归纳一下sizeof(type)的使用规则:

  1. sizeof(数据类型):表示该类型长度

sizeof(char)=1; sizeof(unsigned char)=1;

sizeof(short int)=2 ;sizeof(int)=4; sizeof(unsigned int)=4; sizeof(unsigned long long)=8;

sizeof(float)=4; sizeof(double)=8;

  1. sizeof(结构体类型):表示该结构体长度(字节数)。

如下代码,执行结果为“3”。

struct test
{
    char a;
    char b;
    char c;
};
int main(void)
{
    printf("%d\n", sizeof(struct test));

}

注意:结构体长度不一定等于所有类型长度和,结构体的长度必须为最大长度成员的倍数,且首个元素地址必须与最大长度的元素按照最大长度对齐。

如下代码,执行结果为“12”,结构体成员b长度最大,为4字节,所以结构体大小为4的倍数,且变量a、b的地址也必须是4字节对齐。

struct test
{
    char a;
    int b;
    char c;
};
int main(void)
{
    printf("%d\n", sizeof(struct test));

}

如下代码,执行结果为“24”,8字节对齐。

struct test
{
    char a;
    int b;
    long long c;
    char d;
};
int main(void)
{
    printf("%d\n", sizeof(struct test));

}
  1. sizeof(共用体体类型):表示共用体中最大数据类型的长度(字节数)。

如下代码,执行结果为8,因为共用体Test中数据类型长度最大的long long类型为8。

union Test
{
    char a;
    short int b;
    int c;
    long long d;
};
int main(void)
{
    printf("%d\n", sizeof(union Test));

}
  1. sizeof(变量名):表示该变量的长度。

如下代码,执行结果为“1,4,8”。

int main(void)
{
    char a;
    int b;
    long long c;
    printf("%d,%d,%d\n", sizeof(a), sizeof(b), sizeof(c));

}
  1. sizeof(一维数组名):表示该一维数组所占字节数。

如下代码,执行结果为“10,40,80”。

int main(void)
{
    char a[10];
    int b[10];
    long long c[10];
    printf("%d,%d,%d\n", sizeof(a), sizeof(b), sizeof(c));

}
  1. sizeof(二维数组名):表示该二维数组所占字节数。

如下代码,执行结果为“20,80,160”。

int main(void)
{
    char a[10][2];
    int b[10][2];
    long long c[10][2];
    printf("%d,%d,%d\n", sizeof(a), sizeof(b), sizeof(c));

}

取列指针,如下代码,执行结果为“2,8,16”,表示每行的字节数。

int main(void)
{
    char a[10][2];
    int b[10][2];
    long long c[10][2];
    printf("%d,%d,%d\n", sizeof(a[0]), sizeof(b[0]), sizeof(c[0]));

}
  1. sizeof(函数):表示该函数返回值的长度。

如下代码,执行结果为“0,1,4”

void test1(){return;}
char test2(){return 1;}
int test3(){return 1;}
int main(void)
{
    printf("%d,%d,%d\n", sizeof(test1()), sizeof(test2()), sizeof(test3()));

}
  1. sizeof(字符串):表示该字符串加空字符的长度。

如下代码,执行结果为“9”,共8个非空字符和1个空字符。

int main(void)
{
    printf("%d\n", sizeof("01234567"));

}
  1. sizeof(指针变量):表示指针的长度,与平台地址长度有关。

如下代码,如果在32位PC机上,地址p为32位,执行结果为“4”。如果在62位PC机上,地址p为64位,执行结果为“8”。

int main(void)
{
    char a[10];
    char *p = a;
    printf("%d\n", sizeof(p));

}
  1. 应用实例

例1:如下代码,执行结果为“4”,可以灵活获取表格长度;

#include 
struct test
{
    int Index;
    char a[10];
};
struct test Test[]=
{
    {1,"测试1"},
    {2,"测试2"},
    {3,"测试3"},
    {4,"测试4"}
};
unsigned int iNum = sizeof(Test)/sizeof(struct test);
int main(void)
{
    printf("%d\n", iNum);

}

你可能感兴趣的:(算法,数据结构,c++)