当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

指针与储物箱的关系[VC/C++编程]

赞助商链接



  本文“指针与储物箱的关系[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

指针范例是C++、Pascal等语言中对比重要的数据范例.在利用上很机动.在C++中可以利用以下的语句一个int指针范例:

int *p;

假如要为指针变量赋值,可以利用以下的语句:

int x = 4;
int *p;
p = &x;

关于初学者来说,大概理解指针对比艰难.实际上,在定义指针变量时,就相当于为该指针变量分配一个32位的内存空间(4个字节长)来保存内存地址(仅限于32位操作系统).为而指针变量赋的值实际上就是一个变量(大概是简单范例变量,也大概是复杂范例变量)的首地址.关于32位操作系统来说,不管是什么范例的变量,地址都是4位的(占一个int范例的空间).关于两个指向同一个地址的指针变量,改变一个指针变量所指向的数据,都么另一个指针变量所指向的数据也将改变,以下面的代码所示:

int x = 4;
int *p1, *p2;
p1 = &x;  p2 = &x;
*p1 = 12;
printf("%d", *p2);

上面的代码将输出12.

关于指针的概念及用处,我们也可以做一个形象的比方.假定有两个储物箱A和B.有两个人P1和P2. 在A中安排了很多东西,而B是空的.P1拥有A和B的钥匙,而P2只拥有B的钥匙.并且P1不能直接给P2钥匙. 那么P2该若何获得A中的物品呢?(注意,不能直接把A撬开哦,要用钥匙翻开).

办法吗有以下两个:

1.P1将A和B翻开,将A中的物品放在B中.

2.P1只将B翻开,将A的钥匙放在B中.

第一种办法是直接将A中的物品放在了B中,这么做的好处是无论A发生的什么事,都不会影响B中的物品.但缺陷是太麻烦,并且假如A中物品很多的话,是很浪费时间的.并且B的存储空间要和A的一样多才能存放A中全部的物品.

第二种办法是P1通过B将A的钥匙将给了P2,这种办法的好处是便利,并且B也不需求和A一样大,实际上,只要能放下一把钥匙便可.但缺陷是A大概不只一把钥匙,假如其他人利用了A的钥匙翻开A,并动了A中的物品,那么会直接影响到P2所获得的物品.

我们可以将A和B看做是内存中的两个存储区域.关于第一种办法来说,实际上相当于以下的代码:

typedef struct
{
int x
int y;
float  abc;

} MyStruct;

//  相当于A中的物品
MyStruct A;
//  B参数相当于B储物箱
void  MyMethod(MyStruct B)
{
 
}
//  将A中的物品放入B中
MyMethod(A);

从上面的代码可以看出,将A传入MyMethod办法中需求将A中全部的内容复制到MyMethod的办法栈中,这是很耗费内存资源的.但在MyMethod办法中改正B中的内容,并不会影响到A.但假如利用下面的代码,就会是别的一个模样.

//  B参数只用于保存钥匙,也就是4个字节的指针
void  MyMethod(MyStruct *B)
{
 
}
//  将A的钥匙(指针)放到B中
MyMethod(&A);

上面的办法很节俭内存空间,但在MyMethod办法中改正B指向的构造体中变量的值,也一样会影响到A中呼应变量的值.

读者在利用指针时,可以将指针相象成储物箱的钥匙.当定义一个指针变量时,就相当于成立一个只用于储放钥匙的储物箱.而我们为这个变量赋值时,只能放钥匙(指针)或相当于钥匙大小的其他物品.一个指针变量可以当作一个int变量来利用,以下面的代码也是精确的:

int x = 1234;
int *p;
p = (int*)x;

上面的代码将x中的值强行转换成了整型指针,实际上,这个指针的值就是1234.也就是说,x变量的值变是一个内存地址了.

那么指针的指针呢,也就是 int **p;,那么我们再加一个储物箱C吧.B保存了A的钥匙,而C保存了B的钥匙.只要获得了C的钥匙,便可以按图索骥地翻开A.

也就是说 ,关于int **p,p中保存了是一个地址,但这个地址指向的内存空间保存了也是一个地址,而这个地址所指向的内存空间保存的才是真正的数据(int范例).假如是int ***p,那就再加一个储物箱吧.哈哈.

大概有的读者大概会注意到本文前面所说的第一种办法是将A中的物品放到B中,那么A中不就没了,这不就相当于把A变量清空了,哈哈,没错.不过这个比方只是为了使读者更简单理解指针的含义和优缺陷.假如不想把A清空,就把A中的物品想象成可复制的便可以了,如光盘,把A中的光盘复制一份放到B中,那就更麻烦了.哈哈!


  以上是“指针与储物箱的关系[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 指针与储物箱的关系
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .