簡(jiǎn)單分析C語(yǔ)言中指針數(shù)組與數(shù)組指針的區(qū)別
首先來(lái)分別看一下,指針數(shù)組的一個(gè)小例子:
#include <stdio.h> #include <string.h> int lookup_keyword(const char*key, const char* table[], const int size) { int ret = -1; int i = 0; for(i=0; i<size; i++) { if (strcmp(key, table[i]) == 0) { ret = i; break; } } return ret; } #define DIM(array) (sizeof(array)/sizeof(*array)) int main() { const char* keyword[] = { "do", "for", "if", "register", "switch", "while", "case", "static", }; printf("%d\n", lookup_keyword("static", keyword, DIM(keyword))); return 0; }
數(shù)組指針:
#include <stdio.h> int main() { int i; int* pI = &i; //普通類型 typedef int(AINT5)[5]; AINT5* p1; int array[5]; p1 = &array; //數(shù)組指針1 int (*p2)[5] = &array; //數(shù)組指針2(不建議這樣寫(xiě)) int (*p3)[4] = &array; // X 數(shù)組指針3(不建議這樣寫(xiě)) return 0; }
這兩個(gè)名字不同當(dāng)然所代表的意思也就不同。我剛開(kāi)始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡(jiǎn)稱太專業(yè)了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。
指針數(shù)組:array of pointers,即用于存儲(chǔ)指針的數(shù)組,也就是數(shù)組元素都是指針
數(shù)組指針:a pointer to an array,即指向數(shù)組的指針
還要注意的是他們用法的區(qū)別,下面舉例說(shuō)明。
int* a[4] 指針數(shù)組
表示:數(shù)組a中的元素都為int型指針
元素表示:*a[i] *(a[i])是一樣的,因?yàn)閇]優(yōu)先級(jí)高于*
int (*a)[4] 數(shù)組指針
表示:指向數(shù)組a的指針
元素表示:(*a)[i]
注意:在實(shí)際應(yīng)用中,對(duì)于指針數(shù)組,我們經(jīng)常這樣使用:
typedef int* pInt; pInt a[4];
這跟上面指針數(shù)組定義所表達(dá)的意思是一樣的,只不過(guò)采取了類型變換。
代碼演示如下:
#include <iostream> using namespace std; int main() { int c[4]={1,2,3,4}; int *a[4]; //指針數(shù)組 int (*b)[4]; //數(shù)組指針 b=&c; //將數(shù)組c中元素賦給數(shù)組a for(int i=0;i<4;i++) { a[i]=&c[i]; } //輸出看下結(jié)果 cout<<*a[1]<<endl; //輸出2就對(duì) cout<<(*b)[2]<<endl; //輸出3就對(duì) return 0; }
注意:定義了數(shù)組指針,該指針指向這個(gè)數(shù)組的首地址,必須給指針指定一個(gè)地址,容易犯的錯(cuò)得就是,不給b地址,直接用(*b)[i]=c[i]給數(shù)組b中元素賦值,這時(shí)數(shù)組指針不知道指向哪里,調(diào)試時(shí)可能沒(méi)錯(cuò),但運(yùn)行時(shí)肯定出現(xiàn)問(wèn)題,使用指針時(shí)要注意這個(gè)問(wèn)題。但為什么a就不用給他地址呢,a的元素是指針,實(shí)際上for循環(huán)內(nèi)已經(jīng)給數(shù)組a中元素指定地址了。但若在for循環(huán)內(nèi)寫(xiě)*a[i]=c[i],這同樣會(huì)出問(wèn)題。總之一句話,定義了指針一定要知道指針指向哪里,不然要悲劇。
上一篇:VC中CDC、HDC、pDC區(qū)別與聯(lián)系及相互轉(zhuǎn)換
欄 目:C語(yǔ)言
本文標(biāo)題:簡(jiǎn)單分析C語(yǔ)言中指針數(shù)組與數(shù)組指針的區(qū)別
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2653.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段函數(shù)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排序法函數(shù)
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段函數(shù)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什