首页 > 其他分享 >C语言常用数据类型和自定义数据类型的存储空间

C语言常用数据类型和自定义数据类型的存储空间

时间:2025-01-12 16:22:09浏览次数:1  
标签:自定义 void 数据类型 C语言 lu printf Sizeof pointer sizeof

C语言常用数据类型和自定义数据类型的存储空间

想知道各种数据类型的存储空间长度,编码测试,代码如下:

  • 注意:用到offsetof宏,在stddef.h头文件中定义,一定要包含进去!!!
/* filename: sizeof.c */
#include <stdio.h>
#include <stddef.h> //for offsetof macro

/* compile : gcc sizeof.c -o sizeof
      run : ./sizeof                  */

/* output sizeof common datatype and pointer */
void
out_sizeof (void)
{
  printf ("Sizeof CHAR : %lu\n", sizeof(char));
  printf ("Sizeof SHORT : %lu\n", sizeof(short));
  printf ("Sizeof INT : %lu\n", sizeof(int));
  printf ("Sizeof LONG : %lu\n", sizeof(long));
  printf ("Sizeof LONG LONG : %lu\n", sizeof(long long));
  printf ("Sizeof FLOAT : %lu\n", sizeof(float));
  printf ("Sizeof DOUBLE : %lu\n", sizeof(double));
  printf ("Sizeof LONG DOUBLE : %lu\n", sizeof(long double));
  printf ("Sizeof VOID : %lu\n", sizeof(void));
  printf ("---------------------------------------------\n");
  printf ("Sizeof CHAR pointer : %lu\n", sizeof(char*));
  printf ("Sizeof SHORT pointer : %lu\n", sizeof(short*));
  printf ("Sizeof INT pointer : %lu\n", sizeof(int*));
  printf ("Sizeof LONG pointer : %lu\n", sizeof(long*));
  printf ("Sizeof FLOAT pointer : %lu\n", sizeof(float*));
  printf ("Sizeof DOUBLE pointer : %lu\n", sizeof(double*));
  printf ("Sizeof VOID pointer : %lu\n", sizeof(void*));
  printf ("---------------------------------------------\n");
}

/* define a function pointer */
typedef void (*MyFunctionPointer) (void);

/* define a struct */
typedef struct _Obj Obj;
struct _Obj
{
  int id;
  char name[12];
  int *p;
};

/* define a enum */
enum dtype {
  DT_INT, DT_FLOAT, DT_CHAR
};

/* define a union */
typedef union _Uval Uval;
union _Uval
{
  double fval;
  long   lval;
  char  *sval;
};

/* define a function */
void
out_info (void)
{
  printf ("Some information here!\n");
}

/* output sizeof updefine datatype and other */
void
out_sizeof_other (void)
{
  char c[20];
  char buf[8][8];
  printf ("Sizeof struct _Obj is %lu\n", sizeof(struct _Obj));
  printf ("The name of struct _Obj offset is %lu\n",
	  offsetof(Obj, name));
  printf ("The p of struct _Obj offset is %lu\n",
	  offsetof(Obj, p));
  printf ("------------------------------------------------\n");
  printf ("Sizeof enum dtype is %lu\n", sizeof(enum dtype));
  printf ("Sizeof union Uval is %lu\n", sizeof(Uval));
  printf ("Sizeof function pointer is %lu\n", sizeof (MyFunctionPointer));
  printf ("Sizeof FUNCTION : %lu\n", sizeof(out_info));
  printf ("Sizeof char array c[20] is %lu\n", sizeof(c));
  printf ("Sizeof char array buf[8][8] is %lu\n", sizeof(buf));
  printf ("------------------------------------------------\n");
}

/**/
int
main (int argc, char *argv[])
{
  out_sizeof ();
  out_sizeof_other ();
  return 0;
}
/* --(:-:)-- */

编译运行,结果如下:

songvm@ubuntu:~/works/xdn$ gcc sizeof.c -o sizeof
songvm@ubuntu:~/works/xdn$ ./sizeof 
Sizeof CHAR : 1
Sizeof SHORT : 2
Sizeof INT : 4
Sizeof LONG : 8
Sizeof LONG LONG : 8
Sizeof FLOAT : 4
Sizeof DOUBLE : 8
Sizeof LONG DOUBLE : 16
Sizeof VOID : 1
---------------------------------------------
Sizeof CHAR pointer : 8
Sizeof SHORT pointer : 8
Sizeof INT pointer : 8
Sizeof LONG pointer : 8
Sizeof FLOAT pointer : 8
Sizeof DOUBLE pointer : 8
Sizeof VOID pointer : 8
---------------------------------------------
Sizeof struct _Obj is 24
The name of struct _Obj offset is 4
The p of struct _Obj offset is 16
------------------------------------------------
Sizeof enum dtype is 4
Sizeof union Uval is 8
Sizeof function pointer is 8
Sizeof FUNCTION : 1
Sizeof char array c[20] is 20
Sizeof char array buf[8][8] is 64
------------------------------------------------

常用数据类型、指针、结构体、共用体、枚举

  1. long long 长度为8字节,与long长度相同,可见在LINUX平台用long long不是必要选项!!!
  2. 单精度(float)、双精度(double)、长双精度(long double0的长度分别为4、8、16字节,即32位、64位、128位,位数决定运算精度!!!
  3. 基本类型的指针类型长度都为8字节!!!
  4. 结构体的长度取决于用户的定义的成员的长度的和!!!
  5. 共用体的长度等于最长的成员长度!!!
  6. 枚举类型的存储长度与整型int相同!!!

定义了函数指针、结构体、枚举、共用体、一个简单的函数

  1. 函数指针定义:
    注意:按需求写出返回类型和参数,无类型用void,名字前加星号再用圆括号包上!!!
typedef void (*MyFunctionPointer) (void);
  1. 结构体定义:
    注意:offsetof宏做为一个值使用,指出结构成员在结构体中的偏移数值!!!
typedef struct _Obj Obj;
struct _Obj
{
  int id;        //  4 bytes
  char name[12]; // 12 bytes
  int *p;        //  8 bytes
};               //---------
                 // 24 bytes
  1. 枚举类型定义:
    同样也可以用typedef来定义,可以直接引用DT_INT, DT_FLOAT, DT_CHAR这三个值,提高了代码的可读性!!!
enum dtype {
  DT_INT, DT_FLOAT, DT_CHAR
};
  1. 共用体定义:
    共用体的三个成员共用同一个存储空间,长度由占用空间最大的成员来决定!!!
    下面的定义加了一个整型的ival,长度是4bytes,其他成员长度是8bytes,所以最终长度还是8bytes。
typedef union _Uval Uval;
union _Uval
{
  int    ival;  //  4 bytes
  double fval;  //  8 bytes
  long   lval;  //  8 bytes
  char  *sval;  //  8 bytes
};              //-----------
                //  8 bytes
  1. 函数定义:
/* define a simple function */
void
out_info (void)
{
  printf ("Some information here!\n");
}
  • C语言中的函数是最好玩的,下一步就研究玩函数!!!

标签:自定义,void,数据类型,C语言,lu,printf,Sizeof,pointer,sizeof
From: https://www.cnblogs.com/gwsong52/p/18667017

相关文章

  • 计算CRC循环校验码的简单C语言实现
    #include<stdio.h>#include<string.h>intdata[30];//数据intpoly[30];//生成式intmain(){charstr[30];//输入数据scanf("%s",str);intdata_len=strlen(str);for(inti=0;i<data_len;i++){data......
  • 在keil中ARMCC v6 编译器中用C语言实现ARM cortex-M4 实现startup代码
    #include"stdint.h"#defineStack_Size0x00000800U#defineHeap_Size0x00000400Uuint8_tStack_Mem[Stack_Size]__attribute__((section("STACK")));uint32_t*const__initial_sp=(uint32_t*)&Stack_Mem[Stack_Size];uint8_tHeap_......
  • C语言文件操作
    本文重点:什么是文件文件名文件类型文件缓冲区文件指针文件的打开和关闭文件的顺序读写文件的随机读写文件结束的判定什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件程序文件包括源程序文件(后缀为.c),目标文件(w......
  • C语言程序环境和预处理详解
    本章重点:程序的翻译环境程序的执行环境详解:C语言程序的编译+链接预定义符号介绍预处理指令#define宏和函数的对比预处理操作符#和##的介绍命令定义预处理指令#include预处理指令#undef条件编译 程序的翻译环境和执行环境在ANSIC的任何一种实现中,存在......
  • 使用C语言构建简易视频聊天软件框架,一个基础指南
    在探索现代通信技术的过程中,视频聊天软件已成为人们日常沟通不可或缺的一部分。尽管C语言并非构建此类复杂应用的首选(通常选择更高层次的编程语言如C++、Java或利用特定的SDK),但了解其底层原理对于深入理解网络通信至关重要。本文将通过一个简化的例子,展示如何使用C语言构建一个基......
  • C# 数据类型
    C#数据类型主要有三大类型:值类型、引用类型、指针类型值类型值类型是从System.ValueType派生出来的,可以直接为其分配一个具体的值。当声明一个值类型变量时,系统会自动分配一块内存区域来存储这个变量的值。值类型包括如下几种:整型类型:[sbyte]:8位有符号整数,范围从-......
  • IDEA自定义注解配置
    一、类注释1、打开设置打开设置:Settings->Editor->FileandCodeTemplates,如下图。FileHeader.java为引用的模板文件类头文件注释模板(FileHeader.java)/***@title${NAME}*@date${DATE}${TIME}*@authoryou-ni*@descriptionTODO*/二、方法注释1、打......
  • C语言常见概念
    文章目录一.计算机语言1.计算机语言经历的阶段2.高级语言经历的发展阶段3.C语言程序结构二.算法1.程序=算法+数据结构2.算法特性3.算法三种基本结构三.常量1.整型常量2.实型常量3.字符常量四.关键字五.ASCII表六.标识符七.数据类型1.基本类型2.枚举类型(enum......
  • 写一个判断数据类型的方法
    在前端开发中,JavaScript是一种常用的编程语言,你可以使用typeof操作符来判断一个变量的数据类型。下面是一个简单的函数,它接受一个参数并返回该参数的数据类型:functiongetType(value){returntypeofvalue;}你可以这样使用这个函数:console.log(getType(123));......
  • 如何实现一个自定义表单?
    实现一个自定义表单主要涉及HTML、CSS和JavaScript的使用。以下是一个简单的步骤指南,帮助你从头开始创建一个自定义表单:HTML结构:使用<form>标签来创建表单。在<form>内部,使用各种输入元素,如<input>、<textarea>、<select>等,来创建不同类型的表单字段。为每个输入元素设置na......