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

<b>C++中指针入门</b>[VC/C++编程]

赞助商链接



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

什么是指针?

其实指针就像是别的变量一样,所差别的是普通的变量包含的是实际的真实的数据,而指针是一个指导器,它奉告程序在内存的哪块区域可以找到数据.这是一个非常重要的概念,有很多程序和算法都是环绕指针而计划的,如链表.

开始学习

若何定义一个指针呢?就像你定义一个别的变量一样,只不过你要在指针名字前加上一个星号.我们来看一个例子:下面这个程序定义了两个指针,它们都是指向整型数据.

int* pNumberOne;
int* pNumberTwo;

你注意到在两个变量名前的“p”前缀了吗?这是程序员普通在定义指针时的

一个习惯,以提高便程序的阅读性,表示这是个指针.目前让我们来初始化这两个指针:

pNumberOne = &some_number;
pNumberTwo = &some_other_number;

&号读作“什么的地址”,它表示返回的是变量在内存中的地址而不是变量本身的值.在这个例子中,pNumberOne 等于some_number的地址,所以目前pNumberOne指向some_number. 假如目前我们在程序中要用到some_number,我们便可以利用pNumberOne.

我们来学习一个例子:

在这个例子中你将学到很多,假如你对指针的概念一点都不理解,我倡议你多看几遍这个例子,指针是个很复杂的东西,但你会很快掌握它的.

这个例子用以加强你对上面所介绍内容的理解.它是用C编写的(注:原英文版是用C写的代码,译者重新用C++改写写了全部代码,并在DEV C++ 和VC++中编译通过!)

#include <iostream.h>

void main()
{
// 声明变量:

int nNumber;
int *pPointer;

// 目前给它们赋值:

nNumber = 15;
pPointer = &nNumber;

//打印出变量nNumber的值:

cout<<"nNumber is equal to :"<< nNumber<<endl;

// 目前通过指针改变nNumber的值:

*pPointer = 25;

//证明nNumber已经被上面的程序改变

//重新打印出nNumber的值:

cout<<"nNumber is equal to :"<<nNumber<<endl;
}

通读一下这个程序,编译并运行它,务必懂得它是怎样工作的.假如你完成了,预备好,开始下一小节.

陷井!

试一下,你能找出下面这段程序的错误吗?

#include <iostream.h>

int *pPointer;

void SomeFunction();

{
int nNumber;
nNumber = 25;

//让指针指向nNumber:

pPointer = &nNumber;
}

void main()
{
SomeFunction(); //为pPointer赋值

//为什么这里失利了?为什么没有得到25

cout<<"Value of *pPointer: "<<*pPointer<<endl;
}

这段程序先调用了SomeFunction函数,成立了个叫nNumber的变量,接着让指针pPointer指向了它.但是问题出在哪儿呢?当函数完毕后,nNumber被删掉了,

因为这一个部分变量.部分变量在定义它的函数履行完后城市被系统自动删掉.也就是说当SomeFunction 函数返回主函数main()时,这个变量已经被删掉,但pPointer还指着变量曾经用过的但目前已不属于这个程序的区域.假如你还不懂得,你可以再读读这个程序,注意它的部分变量和全局变量,这些概念都非常重要.

但这个问题怎么办理呢?答案是动态分配技术.注意这在C和C++中是差别的.由于大大都程序员都是用C++,所以我用到的是C++中常用的称谓.


  以上是“<b>C++中指针入门</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

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

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