C语言的内存与地址(C和指针)

我们把计算机的内存看作是一条长街上的一排房屋,每座房子都可以容纳数据,并通过一个房号来标识。

计算机的内存由数以亿计的位组成,每个位可以容纳值0和1.由于一个位所能表示的值得范围太有限。所以单独的位的用处不大,通常许多位合成一组作为一个单位,这样就可以存储范围较大的值。这里有一幅图,展示了现实机器中的一些内存位置。

这些位置的每一个都被称为字节,每个字节都包含了存储一个字符所需要的位数。在许多现代的机器上,每个字节包含8个位,可以存储无符号值0至255.(我的理解是这就是我们所说的char类型)上图这张图并没有显示这些位置的内容,但内存中的每个位置总是包含一些值,每个字节通过地址来标识,如上图方框上面的数字所示。

为了存储更大的值,我们把两个或更多哥字节何在一起作为一个更大的内存单位,例如,许多机器以字为单位存储整数,每个字一般由两个或4个字节组成,其实也就是我们所说的int等类型。

由于它们包含了更多的位,每个字可以容难的额无符号整数范围更大。

注意:尽管一个字包含了4个字节,它仍然只有一个地址,至于它的地址是它最左边的那个字节还是最右边的那个字节的位置,不同的机器有不同的规定。另一个需要注意的是硬件事项是边界对齐问题,在要求边界对齐的机器上,整型值存储的起始位置只能是某些特定的字节,通常是2或4的整数,但这些问题是硬件设计者的事情,它们很少影响C程序员。我们只对两件事情感兴趣:

1   内存中的每个位置由一个独一无二的地址来标识。

2  内存中的每个位置都包含一个值。

变量的值就是分配给该变量的内存位置所存储的数值,即使是指针变量也不例外。指针变量的值是一个内存地址。用*取指针变量的值得到的就是该指针变量指向的内存地址存储的值。

时间: 2024-10-12 14:46:05

C语言的内存与地址(C和指针)的相关文章

C语言 内存和地址

内存与地址 在介绍指针之前,先让我来讲一讲计算机内存与地址.计算机内存可以看作是一辆火车,我们知道火车有很多节车厢,每一节车厢都有车厢编号(坐过火车的人都知道),每一节车厢就可比喻为计算机的一块内存,车厢里面有座位号,通过座位号就可以唯一的确定一个座位,座位号就好在这一个内存块的偏移量,通过它可以唯一确定的数据存储的位置. 注意,内存中的每个位置由一个独一无二的地址标识,内存中的每个位置都包含一个值. 现在举例说明内存中数据存储,如下表,表中加粗边框部分表示内存中实际存储的数据,无边框部分表示内

[转]解读C指针(1)——内存与地址

原文地址:http://blog.csdn.net/czmpersist/article/details/9288203 计算机现在功能虽然强大,但究其实质是0与1的变换,循环往复,以至无穷,故能成其大.正如老子所说“一生二,二生三,三生万物”.“世界万物生于有,有生于无”.所以在学习计算机课程的过程中,要劳劳掌握基础知识,掌握根本,然后再去求变,才能以不变应万变,方为上策. 内存与地址 在介绍指针之前,先让我来讲一讲计算机内存与地址.计算机内存可以看作是一辆火车,我们知道火车有很多节车厢,每一

c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量

一.内存 /* 内存: 存在内存里的. 内存分了N多个小空间,每个小空间1个字节 每个小空间有它自己的地址.每个地址之间差1 int类型占用4个字节,等于占了4个空间(有4个地址),不需要记住4个地址,而记住首地址就行了(因为首地址相当于入口或者生活中的门) 指针: 指针就是地址,地址就是指针. 地址:内存的地址 内存中的地址: 其实也是从1开始编号,然后一直自增 1M内存,1024个地址 0x7fff5fbff7cc:这叫16进制 十进制:逢10进1 有:0 1 2 3 4 5 6 7 8 9

C语言动态内存管理

1-概述 动态存储管理的基本问题是:系统如何按请求分配内存,如何回收内存再利用.提出请求的用户可能是系统的一个作业,也可能是程序中的一个变量. 空闲块 未曾分配的地址连续的内存区称为"空闲块". 占用块 已分配给用户使用的地址连续的内存区称为"占用块". 系统刚刚启动时,整个内存可看做一个大的"空闲块",随着用户请求的进入,系统依次分配相应的内存. 在系统运行过程中,内存被分为两大部分:低地址区(若干占用块)和高地址区(空闲块). 经过一段时间后

C语言中内存分配

C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别. 第2节主要介绍C语言中内存分配及释放函数.函数的功能,以及如何调用这些函数申请/释放内存空间及其注意事项. 3.1 内存管理基本概念 3.1.1 C程序内存分配 1

C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针

(1)开辟的内存没有释放,造成内存泄露 (2)野指针被使用或释放 (3)非法释放指针 (1)开辟的内存没有释放,造成内存泄露,下面的例子就可能造成20个字节的泄露,内存泄露不是一个立即会引发故障的错误,但是 它将消耗系统内存. void function1() { char *pa; pa = (char*)malloc(sizeof(char)*20); if(NULL !=pa) { strcpy(pa,"hello"); printf("pa = %x\n",

C语言动态内存相关函数

C语言动态内存管理函数有4个,分别为malloc,realloc,calloc和free.malloc函数分配一块堆内存:calloc是malloc的变种,功能相同,有细小的差别:realloc修改原内存块大小:free释放参数指针指向的内存块.下面分别介绍它们的函数原型.函数功能和一些特别的注意事项. Function name 函数原型 函数功能 malloc void * malloc ( size_t size ); 向系统申请分配指定size个字节的内存空间.返回类型是 void* 类

C语言中内存分配问题:

推荐: C语言中内存分配 Linux size命令和C程序的存储空间布局 本大神感觉,上面的链接的内容,已经很好的说明了: 总结一下: 对于一个可执行文件,在linux下可以使用 size命令列出目标文件各部分占的字节数:分为:text段.data段与bss段:(参考:Linux size命令和C程序的存储空间布局) 对于一个可执行文件,它的存储空间包括: 1. 代码区(text segment).存放CPU执行的机器指令(machine instructions) 2. 全局初始化数据区/静态

JVM内存管理------JAVA语言的内存管理概述

引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓狂的内存溢出和泄露的问题. 可怕的事情还不只如此,有些使用其它语言开发的程序员,给JAVA程序员扣上了一个"不懂内存"的帽子,这着实有点让人难以接受.毕竟JAVA当中没有malloc和delete.没有析构函数.没有指针,刚开始接触JAVA的程序员们又怎么可能接触内存这一部分呢,更何况有不