C语言 没有重载,通过数组验证数据类型占字节数

来源:互联网 发布:emplace_back源码 编辑:程序博客网 时间:2024/06/01 09:50

数组在内存中存储是连续的,我们可以依次打印数组在内存中的地址,两个相邻数组元素之间的地址的差就是该类型数据在内存中占的大小

#include <stdio.h>#define ARRAY_LEN(array,len){ len=(sizeof(array) / sizeof(array[0]));}static void printArray(int*,int);static void printArray1(char*,int);//C语言不支持重载,不能有两个名字相同的函数。//static void printArray(char*,int);//这样写错误,重载是C++出现之后才有的static void printArrayFloat(float*,int);static void printArrayDouble(double*,int);int main (){    int  var[] = {1, 2, 3};    char chs[]={'a','b','c','d'};    float floats[]={0.1,0.2,0.3,0.4};    double doubles[]={0.1,0.2,0.3,0.4};    int chsLen;    int len;    int floatsLen;    int doublesLen;    ARRAY_LEN(var,len);    ARRAY_LEN(chs,chsLen);    ARRAY_LEN(floats,floatsLen);//计算数组长度    ARRAY_LEN(doubles,doublesLen);    /* 指针中的数组地址 */    printArray(var,len);    printArray1(chs,chsLen);    printArrayFloat(floats,floatsLen);    printArrayDouble(doubles,doublesLen);    return 0;}/*在C语言中,double、long、unsigned、int、char类型数据所占字节数和机器字长及编译器有关系64位编译器            char :1个字节char*(即指针变量): 8个字节       short int : 2个字节              int:4个字节    unsigned int : 4个字节            float: 4个字节           double: 8个字节             long: 8个字节        long long: 8个字节    unsigned long: 8个*/static void printArray(int* array,int len){    int i;    int *ptr=array;    printf("整形一维数组:每个元素占4个字节\n");    for ( i = 0; i < len; i++)    {        printf("存储地址:var[%d] = %x\n", i, ptr );        printf("存储数值:var[%d] = %d\n", i, *ptr );        /* 移动到下一个位置 */        ptr++;    }}static void printArray1(char* array,int len){    int i;    char* ptr=array;    printf("字符型一维数组:每个元素占1个字节\n");    for ( i = 0; i < len; i++)    {        printf("存储地址:var[%d] = %x\n", i, ptr );        printf("存储数值:var[%d] = %c\n", i, *ptr );        /* 移动到下一个位置 */        ptr++;    }}static void printArrayFloat(float* array,int len){    int i;    float* ptr=array;    printf("单精度浮点型float一维数组:每个元素占4个字节\n");    for ( i = 0; i < len; i++)    {        printf("存储地址:var[%d] = %x\n", i, ptr );        printf("存储数值:var[%d] = %f\n", i, *ptr );        /* 移动到下一个位置 */        ptr++;    }}static void printArrayDouble(double* array,int len){    int i;    double* ptr=array;    printf("单精度浮点型double一维数组:每个元素占8个字节\n");    for ( i = 0; i < len; i++)    {        printf("存储地址:var[%d] = %x\n", i, ptr );        printf("存储数值:var[%d] = %f\n", i, *ptr );        /* 移动到下一个位置 */        ptr++;    }}

结果:

整形一维数组:每个元素占4个字节存储地址:var[0] = 28ff04存储数值:var[0] = 1存储地址:var[1] = 28ff08存储数值:var[1] = 2存储地址:var[2] = 28ff0c存储数值:var[2] = 3字符型一维数组:每个元素占1个字节存储地址:var[0] = 28ff00存储数值:var[0] = a存储地址:var[1] = 28ff01存储数值:var[1] = b存储地址:var[2] = 28ff02存储数值:var[2] = c存储地址:var[3] = 28ff03存储数值:var[3] = d单精度浮点型float一维数组:每个元素占4个字节存储地址:var[0] = 28fef0存储数值:var[0] = 0.100000存储地址:var[1] = 28fef4存储数值:var[1] = 0.200000存储地址:var[2] = 28fef8存储数值:var[2] = 0.300000存储地址:var[3] = 28fefc存储数值:var[3] = 0.400000单精度浮点型double一维数组:每个元素占8个字节存储地址:var[0] = 28fed0存储数值:var[0] = 0.100000存储地址:var[1] = 28fed8存储数值:var[1] = 0.200000存储地址:var[2] = 28fee0存储数值:var[2] = 0.300000存储地址:var[3] = 28fee8存储数值:var[3] = 0.400000




原创粉丝点击