• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            陋居

            淡薄名利,修身養(yǎng)性

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              31 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

            常用鏈接

            留言簿

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            C語言中對于下面的兩種情況,是否相同呢?

            char a[] = "abcdefg";---------------1

            char *p = "abcdefg";-----------------2

            在談到這些區(qū)別時(shí),應(yīng)該先談一下計(jì)算機(jī)中對變量是如何存儲(chǔ)的。從編譯原理中我們知道,對于所有的變量他都會(huì)影射到一個(gè)符號(hào)表中。為了簡化,這里給出一種最簡單的便于理解的符號(hào)表:

            a

            0xffaa

            p

            0xffcc

            表1 一個(gè)簡單的符號(hào)表示例

            以上表格中a代表一個(gè)變量,0xffaa則為變量a的內(nèi)容的存儲(chǔ)地址;p代表另一個(gè)變量,0xffcc為變量p的內(nèi)容的存儲(chǔ)地址。對于數(shù)組型的變量和指針型的變量,其地址代表的含義不同。

            對于數(shù)組a:

            這個(gè)0xffaa地址就是其存放數(shù)組內(nèi)容的首地址了。對于a[i]的引用步驟如下:

            步驟一、取出i的值,將他與0xffaa相加;

            步驟二、取出為(0xffaa+i)中的內(nèi)容。

            對于指針p:

            這個(gè)0xffcc地址就是中存放的不是字符串的內(nèi)容,而是一個(gè)地址,這個(gè)地址才是字符串的首地址,對p[i]或者用指針表示*(p+i)的應(yīng)用步驟如下:

            步驟一、取出0xffcc地址中的內(nèi)容,例如為0xffdf;

            步驟二、取出地址0xffdf中的內(nèi)容。

            數(shù)組和指針的對比如下圖:

            下面是在VC6.0下作的一個(gè)試驗(yàn),通過這個(gè)試驗(yàn)大家可以看到,雖然同過[]和通過*引用都一樣,但在內(nèi)部處理的方法是不一樣的。

            #include "stdafx.h"

            #include "stdio.h"

            int main(int argc, char* argv[])

            {

                 int a[3]={1,2,3};

                 int *p =a;

                 printf("a:%d,&a:%d,a[0]:%d,*a:%d,p:%d,&p:%d,*p:%d,p[0]:%d",a,&a,

            a[0],*a,p,&p,*p,p[0]);

                 return 0;

            }

            輸出結(jié)果:

            a:1310580,&a:1310580,a[0]:1,*a:1,p:1310580,&p:1310576,*p:1,p[0]:1。

            由上面的分析可知,如果在一個(gè)文件中定義了一個(gè)數(shù)組int maychar[100],那么下面的聲明就是完全錯(cuò)誤的。

            extern int *maychar;

            這樣的話,在引用時(shí)他就會(huì)按照指針的方法來引用數(shù)組。正確的聲明應(yīng)該是exter int maychar[];這里數(shù)組的大小并不重要。下面將指針與數(shù)組的區(qū)別用表格的形式列出如下:

            指針

            數(shù)組

            保存數(shù)據(jù)的地址

            保存數(shù)據(jù)

            間接訪問數(shù)據(jù)

            直接訪問

            通常用于動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)

            通常用于存儲(chǔ)固定數(shù)目數(shù)據(jù)類型相同的元素

            相關(guān)操作malloc(),free()等

            隱式分配和刪除

            同常指向匿名數(shù)據(jù)

            自身即為數(shù)據(jù)名

            表2 指針與數(shù)組的區(qū)別

            還要提醒一點(diǎn)的就是:

            char a[] = "abcdefg";---------------數(shù)組內(nèi)容能修改(字符數(shù)組)

            char *p = "abcdefg";-----------------內(nèi)容不能修改(字符串常量)

            在ANSI C中,初始化指針是所創(chuàng)建的字符串時(shí)常量,被定義為只讀,如果試圖通過指針修改這個(gè)字符串的值,程序就會(huì)出現(xiàn)為定義的行為。

            posted on 2013-02-19 13:33 eircQ 閱讀(302) 評論(0)  編輯 收藏 引用 所屬分類: TCP/IP
            久久久久久无码国产精品中文字幕| 久久免费视频1| 久久99精品久久久久久水蜜桃| 一级做a爰片久久毛片免费陪| 伊人久久大香线蕉av不卡| 久久99精品国产| 久久久午夜精品福利内容| 99久久国语露脸精品国产| 午夜精品久久久久久| 久久国产精品-久久精品| 一级女性全黄久久生活片免费 | 狠狠色丁香久久婷婷综合图片| 久久久无码精品亚洲日韩蜜臀浪潮| 岛国搬运www久久| 色欲久久久天天天综合网| 久久久久无码专区亚洲av| 国内精品久久久久影院日本| 亚洲日本va午夜中文字幕久久| 91精品国产高清久久久久久国产嫩草| 亚洲AV无一区二区三区久久| 合区精品久久久中文字幕一区| 伊人色综合久久天天| 国产婷婷成人久久Av免费高清| 久久久久久国产精品无码下载| 精品久久久久久99人妻| 国产精品一区二区久久| 日韩av无码久久精品免费| 一本一本久久A久久综合精品| 亚洲精品无码久久久久AV麻豆| 久久黄视频| 久久久久久亚洲精品不卡| 久久久人妻精品无码一区| 草草久久久无码国产专区| 久久99国产精品久久| 久久99精品久久久久久动态图| 久久夜色精品国产噜噜亚洲AV | 国产精品免费久久久久电影网| 久久精品国产精品青草app| 久久99国产精品二区不卡| 精品久久久久久久| 精品久久综合1区2区3区激情 |