首页
社区
课程
招聘
[原创]C/C+++指针学习笔记。
发表于: 2010-9-4 10:50 3055

[原创]C/C+++指针学习笔记。

2010-9-4 10:50
3055
相信编程入门的朋友跟我一样,有一段时间对C语言里面的指针感到很陌生。在今天的学习之前,我本身是十分惧怕学习指针的,因为我一直认为指针是个超级难的东西。后来发现我错了,其实指针的入门是比较简单的,以下是我个人的学习心得。
指针的介绍:
指针其实就是个变量,只不过是存放变量地址的一个变量。以下是摘自网络的一段介绍,希望对大家有点帮助。

--------------------------------------华丽的分割线----------------------------------------------------
这是一个生活中的例子:比如说你要我借给你一本书,我到了你宿舍,但是你人不在宿舍,于是我把书放在你的2层3号的书架上,并写了一张纸条放在你的桌上。纸条上写着:你要的书在第2层3号的书架上。当你回来时,看到这张纸条。你就知道了我借与你的书放在哪了。你想想看,这张纸条的作用,纸条本身不是书,它上面也没有放着书。那么你又如何知道书的位置呢?因为纸条上写着书的位置嘛!其实这张纸条就是一个指针了。它上面的内容不是书本身,而是书的地址,你通过纸条这个指针找到了我借给你的本书。
    那么我们C,C++中的指针又是什么呢?请继续跟我来吧,看下面看一个申明一整型指针变量的语句如下:
    int * pi;
    pi是一个指针,当然我们知道啦,但是这样说,你就以为pi一定是个多么特别的东西了。其实,它也只过是一个变量而已。与上一篇中说的变量并没有实质的区别。不信你看下面图。
    内存地址→6     7   8      9     10     11      12     13     14
    --------------------------------------------------------------
    ...|    30      |  ‘t’ |      |      |      |      |      |      |……
     --------------------------------------------------------------
    变量 |→i   ←|→a   ←|       |→ pi      ←|
    (说明:这里我假设了指针只占2个字节宽度,实际上在32位系统中,指针的宽度是4个字节宽的,即32位。)由图示中可以看出,我们使用int *Pi申明指针变量; 其实是在内存的某处申明一个一定宽度的内存空间,并把它命名为Pi.你能在图中看出pi与前面的i,a 变量有什么本质区别吗,没有,当然没有!pi也只不过是一个变量而已嘛!那么它又为什么会被称为指针?关键是我们要让这个变量所存储的内容是什么。现在我要让pi成为真正有意义上的指针。请接着看下面语句:
    pi=&i;
    你应该知道 &i是什么意思吧!再次提醒你啦:这是返回i变量的地址编号。整句的意思就是把i地址的编号赋值给pi,也就是你在pi上写上i的地址编号。结果如下图所示:
    内存地址→6     7   8   9   10     11    12     13     14
    ------------------------------------------------------------------
    ...|     30      |  ‘t’  |      |      |     6      |      |      |……
    ------------------------------------------------------------------
    变量 |→i   ←|→a    ←|       |→ pi     ←|
    你看,执行完pi=&i;后,在图示中的系统中,pi的值是6.这个6就是i变量的地址编号,这样pi就指向了变量i了。你看,pi与那张纸条有什么区别?pi不就是那张纸条嘛!上面写着i的地址,而i就是那个本书。你现在看懂了吗?因此,我们就把pi称为指针。所以你要记住,指针变量所存的内容就是内存的地址编号!好了,现在我们就可以通过这个指针pi来访问到i这个变量了,不是吗?

-------------摘自http://c.chinaitlab.com/c/basic/200906/788036.html----------------------

相信大家对指针有一定的了解,下面我们用VC++做下实践。

实战。。

输入以下代码:

#include <iostream.h>
int main()
{
	int a=1,b,*pa;     //声明个变量和一个指针变量;
	pa = &a;              //取a变量的地址,并赋值给pa;
	cout <<"pa的值是:"<<pa <<endl <<"*pa的值是:"<<*pa<<endl;
	b = *pa + 5;        //这个其实等于b = a +5;
	cout << b <<endl;
	return 0;
}


运行后

可以看到,
pa储存的是a变量的地址,而*pa是变量a的值。

以我的理解,当程序执行到*pa时,程序按照pa变量的值(也就是a的地址)寻找变量a,而a的值是1,所以返回给*pa的值也就是1(*pa其实就是a的值,不知道这样的理解对不对)所以,当b = *pa + 5时,也就是b = a + 5。

笔记到此结束。

本人C++学习中。不对之处还望大家指出。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//