6.1指针的概念?

如果一个程序中定义一个变量,在编译时就给这个变量分配内存单元。系统根据程序中的定义的变量类型,分配一定的长度空间。VC C++ 6.0中,一个整型变量分配4个字节,微单精度浮点数变量分配4个字节,为字符型变量分配1个字节。内存区的每一个字节有一个编号,这个就是“地址”,它相当于旅馆中的房间号。在地址所标识的内存单元中存放数据,这相当于旅馆中各个房间中居住的旅客一样。

  一个   内存单元的地址   与  内存单元的内容  的区别?

假设程序中定义了3个整型变量 i, j,k,编译时系统分配2000,2001,2002,2003这4个字节给变量 i;

分配2004,2005,2006和2007字节给 j ;  分配2008,2009,2010,1011字节给k;

在程序中一般是通过变量名来对内存单元进行存取操作的。

其实经过编译以后已经将变量名转换为变量的地址,对变量值得存取都是通过地址进行的。

  例如:语句"cout<<i;" 的执行时这样的:

      根据变量名与地址的对应的关系(这个对应的关系是在编译的时确定的),找到变量i的地址2000,然后从由2000开始的4个字节中取出数据(即变量的值3),把他输出。输入的时候,如果用"cin>>i;",在执行时,就把从键盘输入的值,送到地址为2000开始的整型存储单元中。

   如果有语句“k=i+j;”,则是从2000字节开始的整型变量存储单元中取出i的值(图中的值为3),从2004字节开始的变量存储单元中取出j的值(值为6),将他们相加以后在将其(9)送到k所占用的2008字节开始的整型存储单元中。这种按变量地址存取变量值得方式称为直接存取方式,或直接访问方式。

  当然可以采用另外一种方式 间接存取(间接访问)的方式,将变量 i 的地址存放在另外一个变量中。可以在程序中定义这样一种特殊的变量,他是专门用来存放地址的。假设第一个变量i_pointer,用来存放一个整型变量的地址。编译系统给这个变量分配4个字节(假定为3010至3013)3010,3011,3012,3013.

  i_pointer=&i; 执行此句后,i_pointer的值就是2000(即变量i所占用单元的起始地址)。若要取变量 i 的值,除了可以用直接方式外,还可以采用间接方式:先找到存放" i 的地址"的变量 i_pointer ,从中取出 i 的地址(即2000),然后到2000开始的4个字节中取出 i 的值(3)。

  打一个比方吧。为了开一个A抽屉,有2种方法,一种是将 A 钥匙带在身上,需要时直接找出该钥匙打开A抽屉,取出所需的物品。 另外一种方法:为了安全起见,将该A钥匙放在另外一个抽屉B种锁起来。如果需要打开A抽屉,需要先找到B抽屉,打开B抽屉,取出A钥匙,在打开A抽屉,取出A抽屉中之物,这就是间接访问

时间: 2024-08-24 02:47:08

6.1指针的概念?的相关文章

C语言之指针基础概念

开通博客园以来第一次写随笔,就写一下关于C语言指针的一些感想吧. 很多同学都搞不懂指针,我一开始也云里雾里没看懂指针,而且老师又把指针说得很难的样子.其实主要是把指针”*“的作用给弄混了,不用畏惧,细心点看就可以了. 首先简介一下指针的概念好了.指针本身也是一个变量,只不过这个变量的值比较特殊,它不是常规的整型数或者浮点数,而是指向另一个变量地址的值.通过指针的值可以知道另一个变量的地址以及存在该地址中的具体数值(该数值可以是整型,浮点型,结构体,甚至也可以是一个指针),通过指针得到另一个变量的

指针的概念

指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区.让我们分别说明. 先声明几个指针放着做例子: 例一: int *ptr; char *ptr; int **ptr; int (*ptr)[3]; int *(*ptr)[4]; 指针的类型 从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型.这是指针本身

&lt;22&gt;【掌握】指针变量概念及定义方法+【理解】两变量值交换的方法+【掌握】总结*使用场合

[掌握]指针变量概念及定义方法 1.指针变量 用来存放地址的变量,就是指针变量 2.指针? 就是地址,地址是个常量 3.指针变量的定义 数据类型 *指针变量名; int *p; //定义了一个指针变量,变量名是p //int表示,p只能存放一个int类型的变量的地址 char *p1; //定义了一个指针变量,变量名是p1 //p1只能存放一个char类型数变量的地址 int num=10; char *p = &num; //警告 4.指针变量定义的注意事项 1)“*” 必须得有,如果没有就相

C指针解析 ------ 指针的概念及要素

 本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 指针在C语言中的地位,不用多说. 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存中的一个地址.指针有四个要素,分别是指针的类型,指针所指向的类型,指针的值或者指针所指向的内存区,还有指针本身所占据的内存区.所以要理解指针,就必须要搞清楚这四个要素.下面分别来说. 先来看一个例子,通过例子来直观的看指针这四个要素到底代表什么: 例1. (1) int *ptr

黑马程序员 C语言:指针的概念

指针的基本概念 在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问这些内存单元,必须为每个内存单元编上号.根据一个内存单元的编号即可准确地找到该内存单元.内存单元的编号也叫做地址.既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针. 指针与变量 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量.因此,一个指

C语言指针的概念

在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问这些内存单元,必须为每个内存单元编上号.根据一个内存单元的编号即可准确地找到该内存单元.内存单元的编号也叫做地址.既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针. 内存单元的指针和内存单元的内容是两个不同的概念. 可以用一个通俗的例子来说明它们之间的关系.我们到银

C++指针的概念解读[超详细]

转自:http://www.codeceo.com/article/cpp-pointer.html 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区.让我们分别说明. 先声明几个指针放着做例子: 例一: int *ptr; char *ptr; int **ptr; int (*ptr)[3]; int *(*ptr)[4]; 指针的类型 从语法

智能指针的概念和实现

概念 智能指针从字面上看,首先是一个对象,而它的行为(或接口)是在模拟一个指针,但又比指针更加智能.指针的主要作用是引用资源,指针的最大问题是在复杂情况下很难管理好它指向的资源的生命周期.因此智能指针要做的就是在管理资源生命周期这件事情上更加"智能".C++11已经在<memory>模块中提供了常用的三种智能指针,它们分别是 unique_ptr, shared_ptr 和 weak_ptr. 但理解智能指针的原理和实现细节也是十分有意义的.了解原理可以保证更加合理的使用标

8.30 指针基础概念

指针的兼容性 sizeof的结果是一样的就是兼容的. int *p; unsigned int ui = 10; p = &ui;  //正确 指针相加: 不是以整数的形式增加,而是移动 数组名与指针: 函数应该传数组名 : #include <stdio.h> void func(int *a) { a += 3; *a = 100; } int main() { int a[10] = {1,2,3,4,5,6,7,8,9,0}; int i; func(&a);//这里传

指针那些概念

1. 指针数组和数组指针 int *p[3],由于[]的优先级高于*,所以是这样结合的:int *(p[3]),这是一个数组,数组元素是指向int型的指针.可以这样赋值: int a[3][4]; int *(p[3]); for(int i=0;i <3; i++) { p[i] = a[i]; } 指针数组的每个元素为指针,指针指向一个一维数组的首元素. int (*p)[3], 这样则是一个指针,该指针指向一个有3个元素的一维数组,p+1,则是移动了一个一维数组的地址.可以这样赋值: in