-
-
[原创]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++做下实践。
实战。。
输入以下代码:
运行后
可以看到,
pa储存的是a变量的地址,而*pa是变量a的值。
以我的理解,当程序执行到*pa时,程序按照pa变量的值(也就是a的地址)寻找变量a,而a的值是1,所以返回给*pa的值也就是1(*pa其实就是a的值,不知道这样的理解对不对)所以,当b = *pa + 5时,也就是b = a + 5。
笔记到此结束。
本人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直播授课
赞赏
他的文章
- [原创]C/C+++指针学习笔记。 3056
- [求助]脱完壳之后,打开软件一闪而过。万能的Google也无奈。 4574
- [求助]VC++的中文乱码问题 3960
- [求助] 到底何为栈? 3288
谁下载
论坛客服
kanxue
email123
补丁
Jemmy
luoge
flyliying
zgmap
JohnsonGuo
哈哈在世
kingdjh
芳草碧连
刘anan
xiamisun
KooJiSung
wxdmx
风舞雪
porange
jankersky
天行客
brkdancer
芝麻绿豆
待续
mofeijie
qilinjiang
wAngwAy
yangyucun
木叶ss
风声
tokiii
zengkaihui
peterpoon
邓韬
IaaIe
longshizi
lntlctww
evilkis
njxxdx
zyqqyz
烂漫再续
方天画戟
KTX
快乐蛐蛐
ruying
xiaoyouabc
clanbin
Dhuta
dafanxu
qiujing
佳翌
tsxycf
pucci
url
inception
何才
lyjhl
errormsg
chcxs
menghan
lwdwtc
五边形
看原图
赞赏
雪币:
留言: