设为首页 加入收藏

TOP

C++指针、引用知多少(一)
2014-04-06 17:35:51 来源: 作者: 【 】 浏览:253
Tags:指针 引用 多少

  指针

  指针这东西,要是搞复杂了,这还真是高深莫测,你不认真研读研读还真不行,真心觉得搞程序一浮躁,各种bug就都出来了。

  指针的声明:

  1     int x=20;

  2     int *p,q;

  3     int* m,n;

  4     p=&x;

  5     q=x;

  6     m=&x;

  7     n=x;

  8     cout《*p《" "《q《" "《*m《" "《n;

  我想,这应该就是最简单的声明了吧,p是一个指针,并且是一个指向x的指针。那么如果cout《p;会得到什么结构呢?其实p本身保存的是一个地址。并且保存的是x所存储的地址。

  不信的话可以改成以下语句:

  1     int x=20;

  2     int *p,q;

  3     int* m,n;

  4     p=&x;

  5     q=x;

  6     m=&x;

  7     n=x;

  8     cout《p《" "《&x《" "《m;

  他的输出结果就是:

  所以,在这里我们已经对指针有一个初步的认识,指针其实就是一个地址的东西,只不过这个地址保存的是我们所指向的值得地址。

  空指针void*

  我们一般的指明了指向类型的指针都是只能指向该类型的,比如说上面提到的p指针,它只能指向Int类型。但是void*是怎么样的呢?

  其实void*指针可以指向任何类型,当然也可以指向int.如果我们下面代码会出现什么情况呢?

  1     void *y;

  2     y=&x;

  3     cout《y;

  实际上我们会发现,y输出的是地址,并且和上面的P,m的地址是一致的,实验发现,我上面的说法是对的。

  很显然,如果仅仅得到一个void*指针是没有太大意义的,那么我们怎么把他转化成原有的int*,甚至转化成int呢?

  这里我们需要显示转化,(int*)y,转化成整数的话就是*((int*)y);

  所以现在我们应该知道了当函数的返回值是void和void*是有多么大的不同了吧。void*是返回一个特殊的指针类型。

  多重指针

  这里说的多重指针在很多地方也称为指向指针的指针。

  我们是不是经常会遇到int **m;这种情况呢,其实他就是一个多重指针。

  还是上面那个例子,我们以下定义一个多重指针

  1     int **z;

  2     z=&p;

  3     cout《"多重指针"《p《*z;

  p我们知道会输出x的地址,那么*z又是上面呢,z是一个指向指针p的指针。那么z保存的是p的地址,*z理所当然的应该保存的也是x的地址。

  了解了这个之后,那么我们就很容易的知道了,动态二维数组的创建过程了,就是一个指向指针的指针,二重指针嘛,so easy.

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++深度拷贝与构造函数的异常 下一篇C++中类的特殊数据成员的构造

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)