sizeof是C语言的一种单目操作符。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。本文主要介绍C语言中,sizeof()判断数组占用空间及元素个数的方法,以及相关的示例代码。

1、sizeof使用方法

sizeof()可以用于数据类型和变量,用于数据类型必须使用括号,用于变量名可以不用括号括住。

1)数据类型

sizeof(type)

2)用于变量名

sizeof(var_name)

sizeof var_name

2、sizeof在数组与指针区别

sizeof在对待数组与指针有区别,对于直接的调用sizeof,如果是数组首地址,sizeof会输出数组所占地址空间的大小(字节为单位)。如果是一个指针的话,则输出在该系统中地址的字节宽度,即(位宽/8)。

例如,

#include<stdio.h>
 
int a1;
long int a2;
short int a3;
char a4;
float a5;
double a6;
 
char ba[7]={1,2,3,4,5,6,7};
char *pba=ba;
char *pba1;
 
short int bb[3]={1,2,3};
short int *pbb=bb;
short int *pbb1;
 
void main(void)
{
  
    printf("int       字节长度:%d\n", sizeof(a1));
    printf("long int  字节长度:%d\n", sizeof(a2));
    printf("short int 字节长度:%d\n", sizeof(a3));
    printf("char      字节长度:%d\n", sizeof(a4));
    printf("float     字节长度:%d\n", sizeof(a5));
    printf("double    字节长度:%d\n", sizeof(a6));
    
    printf("\n");
    printf("char ba[7];   sizeof(ba)   = %d\n", sizeof(ba));
    printf("char *pba=ba; sizeof(pba)  = %d\n", sizeof(pba));
    printf("char *pba1;   sizeof(pba1) = %d\n", sizeof(pba1));
    
    printf("\n");
    printf("short int bb[3];   sizeof(bb)   = %d\n", sizeof(bb));
    printf("short int *pbb=bb; sizeof(pbb)  = %d\n", sizeof(pbb));
    printf("short int *pbb1;   sizeof(pbb1) = %d\n", sizeof(pbb1));
}

3、函数参数中数组和指针

作为参数发送给函数的数组被视为指针,因此将返回指针的大小,而不是数组的大小。示例如下,

#include <stdio.h>
#include <stdlib.h>

void printSizeOf(int intArray[]);
void printLength(int intArray[]);

int main(int argc, char* argv[])
{
    int array[] = { 0, 1, 2, 3, 4, 5, 6 };

    printf("sizeof of array: %d\n", (int) sizeof(array));
    printSizeOf(array);

    printf("Length of array: %d\n", (int)( sizeof(array) / sizeof(array[0]) ));
    printLength(array);
}

void printSizeOf(int intArray[])
{
    printf("sizeof of parameter: %d\n", (int) sizeof(intArray));
}

void printLength(int intArray[])
{
    printf("Length of parameter: %d\n", (int)( sizeof(intArray) / sizeof(intArray[0]) ));
}

推荐文档