關(guān)于數(shù)組指針和 指針數(shù)組,相信狠很多同學(xué)對此疑惑過,今天我們來把他們分個清楚!
首先,讓我們從字面意義上理解他們:
指針數(shù)組 本質(zhì)呢 是數(shù)組!
數(shù)組指針 本質(zhì)呢 是 指針!
(PS:你可以認(rèn)為后倆字是什么,它本質(zhì)就是什么! 語文的知識吧?賓語?(*^__^*) )
搞清楚此點之后呢,我們就可以繼續(xù)來講了,其實呢,指針數(shù)組本身就是個數(shù)組,只不過呢,它里面存放的數(shù)據(jù)類型不是int,也不是char這類基本類型,而是一個指針類型,說白了就是地址,所以叫指針數(shù)組! 記住:是存放指針的數(shù)組!
那么理解這個之后,數(shù)組指針也一樣的道理,它呢本質(zhì)是個指針,只不過是指向一個一維數(shù)組的指針,也稱之為“行指針”,前提呢,是這個一維數(shù)組的長度和這個數(shù)組指針的長度要一致才可以賦值。
下面我們通過代碼來理解:
////////////////////////////////////////////////////////////////////////// //Name: 測試 數(shù)組指針 與 指針數(shù)組 //Author:C語言研究中心(www.sztianhecheng.cn) //time:2015/5/28 ////////////////////////////////////////////////////////////////////////// #include<stdio.h> int fun() { char *p1[10]; // 指針數(shù)組 char (*p2)[10]; //數(shù)組指針 //10個char變量 char a1[10]={'1','2','3','4','5','6','7','8','9','\0'}; //兩個長度為10的一維數(shù)組 char a2[2][10]={{'q','w','e','r','t','y','u','i','o','\0'},{'a','s','d','f','g','h','j','k','l','\0'}}; //將十個char類型變量的地址依次放到指針數(shù)組里 p1[0]=&a1[0]; p1[1]=&a1[1]; //... p1[8]=&a1[8]; //驗證輸出 printf("%c\n",*p1[0]); printf("%c\n",*p1[1]); //... printf("%c\n",*p1[8]); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //將一維數(shù)組的地址放到數(shù)組指針里 p2=&a2[0]; printf("%s\n",p2); printf("%s\n",p2+1);//注意此處+1為加一行! return 0; }
怎么樣?能看明白嗎?運行結(jié)果如下:
如果您通過注釋看懂這段代碼后,想必應(yīng)該就清楚數(shù)組指針和 指針數(shù)組的區(qū)別了。
最后我們總結(jié)數(shù)組指針和指針數(shù)組的區(qū)別如下:
1、本質(zhì)不同,一個是數(shù)組,一個是指針
2、數(shù)組指針是一個變量,指針數(shù)組是N(數(shù)組長度)個變量
C語言研究中心(www.sztianhecheng.cn)