关于不同数据类型存储方式的的理解

来源:互联网 发布:极简装修 知乎 编辑:程序博客网 时间:2024/04/30 08:55

计算机的内存中,所有使用的数据都是以二进制的形式线性的存储在内存中。各种编程语言中的定义了很多种不同的类型,根本上讲这些不同类型的变量的存储都是以二进制线性存储的,之所以要定义出这么多类型,只是方便用户(程序员)采用不同的方式引用或者处理这些不同类型的变量。不同的数据类型表现形式不同,但存储的的本质是一样的。看看下面的代码 就知道我在说什么了。

#include<stdio.h>#include <string.h>typedef struct _pack_data{int a;char b[5];union pq_pack_data{long index;long age;}pa_data;}pack_data_t;int main(int argc,char **argv){char buf[100];memset(buf,0,sizeof(buf));pack_data_t pack_data ;pack_data.a = 1;memcpy(pack_data.b,"123",3);pack_data.pa_data.age = 13;memcpy(buf,&pack_data,sizeof(pack_data));pack_data_t pack_data2;/*把变量pack_data的内容存到buf中,体现了数据的存储本质是一样的,都是存在内存中,跟数据类型无关。在这里buf中有了数据 但是不能用buf[num],**这种方式来访问其中的内容。虽然pack_data的内容是复制到了buf中,但数据的存储方式是以变量pack_data的方式存储的。要打印buf中的数据,**必须采用pack_data变量的格式打印。即有下面的代码:*/memcpy(&pack_data2,buf,sizeof(pack_data));printf("pack_data2.a = %d\n", pack_data2.a);printf("pack_data2.b  = %s \n", pack_data2.b);printf("pack_data2.pa_data.age = %d\n", pack_data2.pa_data.age);return 0;}