回 帖 发 新 帖 刷新版面

主题:C指针不明者看:《彻底搞定C指针》第一篇---变量的内存实质

《彻底搞定C指针》第一篇



[b]一.先来理解C语言中变量的实质[/b]
    要理解C指针,我认为一定要理解C中“变量”的存储实质,所以我就从“变量”这个东西开始讲起吧!
    先来理解理解内存空间吧!请看下图:

内存地址→  6      7       8      9       10      11      12      13
----------------------------------------------------------------------------
··· |       |       |       |       |       |       |       |       |··
---------------------------------------------------------------------------

    如图所示,内存只不过是一个存放数据的空间,就好像我的看电影时的电影院中的座位一样。每个座位都要编号,我们的内存要存放各种各样的数据,当然我们要知道我们的这些数据存放在什么位置吧!所以内存也要象座位一样进行编号了,这就是我们所说的内存编址。座位可以是按一个座位一个号码的从一号开始编号,内存则是按一个字节一个字节进行编址,如上图所示。每个字节都有个编号,我们称之为内存地址。好了,我说了这么多,现在你能理解内存空间这个概念吗?
    我们继续看看以下的C、C++语言变量申明:
int i;
char a;
    每次我们要使用某变量时都要事先这样申明它,它其实是内存中申请了一个名为i的整型变量宽度的空间(DOS下的16位编程中其宽度为二个字节),和一个名为a的字符型变量宽度的空间(占一个字节)。
    我们又如何来理解变量是如何存在的呢。当我们如下申明变量时:
int i;
char a;
内存中的映象可能如下图:

内存地址→   6      7       8      9      10      11    12      13
-------------------------------------------------------------------------
···|       |       |       |       |       |       |       |       |··
-------------------------------------------------------------------------  
变量名|→i          ←|→a  ←|

    图中可看出,i在内存起始地址为6上申请了两个字节的空间(我这里假设了int的宽度为16位,不同系统中int的宽度是可能不一样的),并命名为i。 a在内存地址为8上申请了一字节的空间,并命名为a。这样我们就有两个不同类型的变量了。
    
[b]2.赋值给变量[/b]
    再看下面赋值:
i=30
a=’t’
    你当然知道个两个语句是将30存入i变量的内存空间中,将’t’字符存入a变量的内存空间中。我们可以这样的形象理解啦:

内存地址→   6      7       8      9      10      11    12      13
-----------------------------------------------------------------------------
··· |       30      |  ‘t’  |       |       |       |       |       |··
-----------------------------------------------------------------------------
       |→i          ←|→a  ←|


[b]3。变量在哪里?(即变量的地址)[/b]
    好了,接下来我们来看看&i是什么意思?
    是取i变量所在的地址编号嘛!我们可以这样读它:返回i变量的地址编号。你记住了吗?
    我要在屏幕上显示变量的地址值的话,可以写如下代码:
printf(“%d”,&i);
    以上图的内存映象所例,屏幕上显示的不是i值30,而是显示i的内存地址编号6了。当然实际你操作的时,i变量的地址值不会是这个数了。
    这就是我认为作为初学者们所应想象的变量存储实质了。请这样理解吧!

    最后总结代码如下:
int main()
{
      int i=39;
      printf(“%d\n”,i);   //①
      printf(“%d\n”,&i);  //②
    }
    现在你可知道①、②两个printf分别在屏幕上输出的是i的什么东西啊?
    好啦,下面我们就开始真正进入指针的学习了。Come on !(待续...)


回复列表 (共22个回复)

沙发

支持。

板凳

ding!!!!!!!!!!!!!!!!!!!!

3 楼

支持!

4 楼

继续,谢谢![em4]

5 楼

[em14]早先就拜读过您的大作,真的感觉受益匪浅,不过怎么第四篇后就没有再续了啊,网上搜索也找不到,希望你能够给我一个拜读全文的机会,先谢谢了!

6 楼

好帖
很好帖
确实好帖
少见的好帖
真正好的好帖
难得一见的好帖
千年等一回的好帖
好得不能再好的好帖
惊天地且泣鬼神的好帖
让人阅毕击掌三叹的好帖
让人佩服得五体投地的好帖
让人奔走相告曰须阅读的好帖
让斑竹看后决定加精固顶的好帖
让人看后在各论坛纷纷转贴的好帖
让人看后连成人网站都没兴趣的好帖
让人看完后就要往上顶往死里顶的好帖
让人看后不断在各种场合重复引用的好帖
让人一见面就问你看过某某好帖没有的好帖
让人半夜上厕所都要打开电脑再看一遍的好帖
让个读过后都下载在硬盘里详细研究欣赏的好帖
让人走路吃饭睡觉干什么事连做梦都梦到它的好帖
让人翻译成36种不同外语流传国内外世界各地的好帖
让人纷纷唱道过年过节不送礼要送就送某某帖子的好帖
让国家领导人命令将该帖刻在纯金版上当国礼送人的好帖
让网络上纷纷冒出该帖的真人版卡通版搞笑版成人版的好帖
让人在公共厕所里不再乱涂乱化而是纷纷对它引经据典的好帖
让某位想成名的少女向媒体说她与该帖作者发生过性关系的好帖
让人根据它写成小说又被不同导演拍成48个不同版本的电影的好帖
让某名导演跟据此帖改拍的电影在奥斯卡上一连拿了11个奖项的好帖
让人大代表们看完后联名要求根据该帖的内容对宪法做适当修改的好帖
让人为了谁是它的原始作者纷纷地闹上法院打官司要争得它的版权的好帖
让各大学府纷纷邀请该帖作者去就如何发表优秀网络文学为题目演讲的好帖
让人为了该帖而成立了各种学会来研究并为不同的理解争得眼红脖子粗的好帖
让美国警察于今后逮捕人说你有权保持沉默还有权阅读某某帖子要不要啊的好帖
让本拉登躲在山洞里还命令他手下冒着被美军发现的危险去上网下载来阅读的好帖
让萨达姆被捕时被发现他随身携带的除了一把手枪之外还有的就是它的复印件的好帖
让比尔盖茨在懂事会上发给与会者人手一份该帖命令仔细阅读后才讨论其他事宜的好帖
让诺贝儿奖理事会破天荒地因该帖的出现而开会讨论一直决定今后设立最佳帖子奖的好帖
让联合国安理会决定将它译成宇宙语由中国神州六号升空后不断播放看有没有外星人的好帖

7 楼

支持支持
建议搞个合集

8 楼

支持一下.
呵呵,听君一夕话,胜读两本书!!

9 楼

嘿嘿,写得不错,听通俗易懂的~~不过复杂的譬如跟位段有关的存储是不是在后面涉及了呢,还是先看看2吧~

10 楼

谢谢!学习中!

我来回复

您尚未登录,请登录后再回复。点此登录或注册