青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 19,  comments - 21,  trackbacks - 0

初學者往往知道數組和指針之間有聯系,但是具體的聯系和限制卻又搞不清楚,想當年我也如此,這里就將這方面的知識做個總結吧。

1.定義

定義數組時必須指定數組的類型和大小,
定義指針時只需要指定類型。

2.存儲空間的分配


對于數組,因為系統會按照你指定的大小為數組分配存儲空間,這也是為什么數組必須指定大小的原因,如:char array[5] ; //系統會自動為其預留sizeof(char)*5個字節的連續內存(注意是連續的)。所以我們可以對array[0]...array[4]這五個變量隨便訪問(讀和寫)都不會有問題。
對于指針,系統只會為所定義的指針變量分配空間,指針所指向的地點并未分配。舉個例子: char *p ; 這里會為變量p分配空間,大小為4字節(32位機),但是*p(就是p指向的地方)卻是隨機的地方,這個地方系統也不為其分配空間。所以在這種情況下,你訪問和給p賦值(p=...)都是允許的,但是訪問*p或者給*p賦值都是錯誤的。我們要想使用*p必須先使其指向有效區域,這可以通過動態申請內存或者賦值(將知道的有效地點賦給它)來實現。
提醒一下:對于指針,在使用時,不光所指向的區域能讀寫,指針變量本身也能讀寫,但是數組不同,數組名的不能寫的(允許讀)。為什么?因為指針變量p有存儲空間,而數組名array是沒有的。

3.多級指針


一級指針,char *p ; //p為指向char類型的指針變量。

有了指針變量我們就可以定義任何類型的指針,可以隨心所欲的用指針來訪問任何類型的變量。但是有人發現了問題,使用這種定義,我們無法用指針來操縱指針類型,于是二級指針的定義被拿出來了。

二級指針就是指向指針的指針,用來操縱一指針變量。
例:char **pp ;
定義的pp為指向一個 指向一char變量的指針 的指針。
我們可以將 pp指向到前面定義的p : pp = &p ;
現在很容易看清他們之間個關系:
*pp就是訪問pp指向的位置,訪問的值當然就是p,
**pp就是*(*pp)拉,當然等于*p.

注意 定義pp的時候,系統只為pp分配了空間,并未為*pp分配空間,后來能訪問*pp是因為我們使用pp=&p將pp指向了&p這個已經分配好了的空間。

同理,為了控制二級指針于是有了三級指針,...

4.多維數組

char array[5];//定義了array為含有5個char元素的數組。
二維數組的定義我就不多說了,相信大家知道得已經很詳細了。我這里就說一說他們的名稱吧。提醒一下:他提出的愿意是我們希望得到array類型的數組。
char arrayMulti[3][5] ;
前面說過數組名不是變量,那么它是怎么使用的呢?
其實數組名只是在編譯時刻編譯器用來定位變量位置的一個標簽。比如 array[3],那么編譯器就認為是“標簽+3”,你如果寫 array[6],那么編譯器就認為是“標簽+6”,這就是C不會給出數組越界錯誤的原因。那么arrayMulti是什么呢?細讀二維數組的定義:我們定義的是一個數組的數組。我們寫了這個定義,就意味著我們已經有了 char [5] 這種類型的數組,而現在我們要定義一個現有數組類型的數組arrayMulti 。并且在以后的程序中他會永遠記得它的元素的類型是char [5],所以你在訪問他的元素arrayMulti[1]時,他知道這是一個char[5]的數組。同樣二維數組也不檢查越界,所以你寫arrayMulti[2][5]不會有問題。
提示:編譯器不檢查數組的越界,但會檢查數組元素的類型,所以:
對于array ,你給array[0]一個int型的值是不行的,因為他的元素是char類型;
對于arrayMulti,你他的元素一個char[6]的值也是不行的(詳細例子見“蛻化”)。

5.數組名的蛻化


數組在作為函數參數時,數組名將蛻化為指針。C語言的書上是這么說的,我這里要說得是:這句話是不完全正確的!我們知道指針是占用內存的,但是這個蛻化而成的家伙是不占有內存的,仍然只是個標簽。書上為什么這么說呢?書上的意思是說這家伙已經蛻化得不知道自己有幾個元素了。舉個例子:
void fun(char array[5]);
在編譯時編譯器會當成是:void fun(char *array);你在這個函數中使用sizeof(a)得到的值是4,而在定義char array[5]的函數中sizeof(array) = 5,說明確實已經蛻化為指針了。所以你寫:
char *pa = array ; //正確,指針到指針

數組名退化為指針,在這里強調一下:數組的元素類型仍然存在!這里要注意的是多維數組的情況。
以2維數組為例:
void fun2(char arrayMulti[3][5]);
那么在函數fun2中,arrayMulti蛻化成的是char (*)[5],即:指向char[5]類型的指針,因為前面分析過arrayMulti的元素的類型是char[5],所以在程序中:
char **pm = arrayMulti ; //錯誤:從char (*)[5]到 char **的賦值
char (*pm5)[5] ;
pm5 = arrayMulti ; //正確。

6.對元素的訪問
數組名是一個標簽,是一個記錄地址的標簽,在對元素的訪問上所起的作用和指針一樣,所以:
int a[5];
int *b;
b=a;
那么:
a[1],b[1],*(a+1),*(b+1)都是允許的。
更懸一點:因為其在這兒所起的作用僅僅是個標簽而已(編譯的時候就是讓兩者相加),所以:
1[a],1[b],也是允許的。

7.取地址
對指針變量使用&運算后得到的是指針變量的地址,那么數組名呢?
他僅僅是個標簽啊,根本就沒地方存放。
所以C語言中的規定是取數組地址的結果是:仍然是其本身。
既 &array 的值和 array一樣。
注意:值是一樣,類型是不一樣的。

------------------------

雖然數組名的確沒有存儲空間,但把&a規定為跟a的地址值一樣并不是這個原因。
數組名是一個右值,本來不符合&的語法的,但是,數組卻是一個對象,對一個
數組對象取地址是合理的,C標準委員會經過衡量,認為維護一個對象的完整性
更重要,因此允許&a,只不過,&a的意義,并非對一個數組名取地址,而是對
一個數組對象取地址。

posted on 2005-12-18 21:08 halCode 閱讀(963) 評論(0)  編輯 收藏 引用 所屬分類: 算法/數據結構

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(7)

隨筆分類

隨筆檔案

文章分類

文章檔案

相冊

編程資源

不務正業

找工作

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产日韩一区二区| 亚洲人成在线观看| 韩国一区二区三区美女美女秀| 欧美三区在线视频| 欧美日韩综合另类| 国产精品每日更新| 国产麻豆一精品一av一免费| 欧美日韩精品综合在线| 欧美午夜国产| 国产精品综合不卡av| 国产真实乱偷精品视频免| 国产综合色精品一区二区三区| 国产日韩一区| 精品91久久久久| 亚洲欧洲综合| 亚洲制服av| 欧美在线看片a免费观看| 久久久亚洲高清| 亚洲国产影院| 亚洲伊人色欲综合网| 久久久久免费观看| 欧美日韩欧美一区二区| 国产午夜精品视频| 亚洲精品一区在线| 久久9热精品视频| 亚洲人成网在线播放| 欧美亚洲在线播放| 欧美高清在线视频| 国产日本亚洲高清| 99www免费人成精品| 香蕉乱码成人久久天堂爱免费 | 夜夜夜久久久| 欧美在线观看天堂一区二区三区 | 久久久久久香蕉网| 亚洲国产精品久久久久婷婷老年| 日韩视频免费在线观看| 久久经典综合| 国产精品老女人精品视频| 在线观看亚洲视频啊啊啊啊| 亚洲男人的天堂在线| 亚洲高清资源综合久久精品| 午夜精品成人在线| 欧美美女bbbb| 亚洲激情视频在线播放| 欧美在线关看| 欧美aⅴ99久久黑人专区| 亚洲国产欧美精品| 久久久久久精| 欧美日韩不卡视频| 黑人一区二区三区四区五区| 亚洲欧美国产三级| 亚洲国产精品成人综合色在线婷婷| 中日韩在线视频| 欧美日韩在线不卡| 99精品99| 亚洲国产精品久久久久婷婷老年| 久久国产精品毛片| 国产真实乱偷精品视频免| 久久不射电影网| 亚洲欧美久久久久一区二区三区| 国产精品高清一区二区三区| 999亚洲国产精| 亚洲黄页一区| 欧美精品1区2区| 亚洲精品美女91| 亚洲激情视频网站| 欧美精品亚洲精品| 亚洲精品免费在线| 亚洲日本aⅴ片在线观看香蕉| 在线精品一区| 欧美激情一区二区三区 | 另类人畜视频在线| 欧美一区二区三区在线视频 | 一本色道久久综合精品竹菊 | 欧美日韩dvd在线观看| 在线视频欧美一区| 一区二区三区欧美| 国产精品试看| 久久免费的精品国产v∧| 久久精品欧洲| 亚洲精品国产无天堂网2021| 亚洲精品一品区二品区三品区| 欧美日韩伦理在线| 久久成人一区| 免费在线国产精品| 一区二区三区色| 亚洲欧美在线视频观看| 怡红院av一区二区三区| 亚洲黄色大片| 国产精品一区二区你懂得| 久久午夜精品一区二区| 女女同性女同一区二区三区91| 亚洲调教视频在线观看| 在线一区二区三区四区五区| 中日韩男男gay无套| 国产欧美日韩精品一区| 男男成人高潮片免费网站| 欧美日韩国产首页| 欧美专区在线| 欧美精品18| 在线观看亚洲视频| 狠狠色丁香久久婷婷综合_中| 六月天综合网| 欧美香蕉视频| 欧美成人dvd在线视频| 欧美日韩三级视频| 久久精品最新地址| 欧美大香线蕉线伊人久久国产精品| 欧美国产在线观看| 亚洲欧美日韩精品久久久久| 久久久五月天| 午夜精品视频在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲永久免费视频| 美女视频黄 久久| 亚洲一区二区三区四区五区黄| 欧美在线啊v| 一本久久a久久免费精品不卡| 亚洲在线观看| 亚洲精品视频二区| 久久精品视频在线看| 一本色道久久综合亚洲精品不 | 欧美日韩国产限制| 久久久国产成人精品| 欧美日韩亚洲国产一区| 蜜桃av噜噜一区二区三区| 国产精品久久久久久久久久久久久久| 久久久精品一区二区三区| 欧美性感一类影片在线播放 | 亚洲高清一区二区三区| 午夜精品久久久久影视| 亚洲永久在线观看| 欧美日韩国内自拍| 91久久精品网| 日韩天天综合| 欧美本精品男人aⅴ天堂| 久久免费午夜影院| 黑人极品videos精品欧美裸| 久久av一区二区三区漫画| 久久精品人人做人人爽| 国产日韩精品一区| 小嫩嫩精品导航| 久久国产精品99精品国产| 国产日产欧美精品| 久久精品在线视频| 欧美黄色片免费观看| 亚洲日本欧美日韩高观看| 欧美黄色一区二区| 99国产精品久久久| 午夜日韩视频| 国精产品99永久一区一区| 亚洲四色影视在线观看| 亚洲宅男天堂在线观看无病毒| 国产精品色午夜在线观看| 亚洲免费在线电影| 久久精品视频在线看| 亚洲成人在线视频播放| 免费在线看成人av| 亚洲免费观看视频| 欧美久久久久中文字幕| 欧美 日韩 国产在线 | 久久久久欧美| 国产精品视频免费观看| 欧美永久精品| 欧美激情中文字幕乱码免费| 亚洲日本视频| 欧美日精品一区视频| 亚洲在线视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲第一中文字幕在线观看| 欧美人妖在线观看| 性欧美大战久久久久久久免费观看| 裸体一区二区| 亚洲一本大道在线| 一色屋精品亚洲香蕉网站| 欧美电影资源| 亚洲免费影院| 亚洲第一级黄色片| 午夜伦理片一区| 亚洲国产天堂久久国产91| 欧美午夜视频一区二区| 久久精品国产精品亚洲精品| 日韩视频免费大全中文字幕| 久久成人免费网| 亚洲天堂网站在线观看视频| 国产日韩欧美综合| 欧美三级视频在线| 老牛国产精品一区的观看方式| 亚洲免费观看在线观看| 免费成人在线观看视频| 亚洲在线国产日韩欧美| 亚洲第一网站| 在线观看国产成人av片| 国产麻豆精品theporn| 欧美日本一区| 毛片一区二区三区| 久久本道综合色狠狠五月| 亚洲另类视频| 欧美韩日一区二区| 久久综合999|