用内存的视角来剖析C/C++语言中的变量、数组、结构、指针等概念的本质

对于C/C++中的很多概念从内存的视角可以深入理解它们的本质

注:对于多个连续的字节存储,根据CPU平台以及开发环境的不同,分为大端和小端存储。如下图所示,存储int类型的变量a=0xABCDEFAA(4个字节)时,图1是小端存储,图2是大端存储。

                                                                   

内存是用于存储数据的物理器件,拆开计算机就可以发现一块长方形的内存条。数字最终是以二进制的形式存储于内存中,因为二进制只有2个符号,便于用物理量进行表示,类似于开关量,即每个字节有8个开关,其不同组合可以表示不同的数。

(1)变量

对于变量来说,首先要知道变量的类型,即确定用几个字节来表示这个变量的值,不同类型的变量对应于不同区域的内存,区域大小即字节个数,由变量的类型决定。不管是基本类型还是派生类型,本质并无区别,仅仅是所占用的内存字节数大小不同而已C/C++中的数据类型如下图所示。


(2)数组

数组用于表示若干个相同类型的变量(结构体用于表示若干个不同类型的变量),对于数组来说,它也是变量,仅仅相当于若干个相同基本类型变量连续排列在一起,在内存中连续排列。如short a[3]={0x1111,0x2222,0x3333};内存视图如下所示。


(3)结构体

与数组并无本质区别,不同的是结构体内的变量可以是不同类型的数据。

struct Body

{

int a;

short b;

char c;

};

struct Body d={0x12345678,0x1234,0x12};

内存视图如下:



(4)指针

指针即变量的首地址,本质是一个整数,理论上可以用int或short进行表示,但为了突出强调它是一个内存地址,提出一个新的类型,指针类型来表示,如指向int型变量的指针int *P=0xABCDEFFF。

1、指向不同类型的变量表示不同的指针类型:int*,short*,char*

2、指针也是变量,变量就是可以改变的,即指向的地址改变。

3、不同类型的指针不能相互赋值,指向不同类型的数据,占据不同的字节数

4、指针本质就是一个整型

5、指针有星号操作,即取指针指向的变量的值






猜你喜欢

转载自blog.csdn.net/chenguigan/article/details/80244770