說個題外話吧!因為水平有限的關系,總感覺自己寫的並不是太好,很多地方寫的還是很模糊,但是我還是會盡量把自己的見解寫出來,因為去年我剛接觸C的時候,光看理論就已經把我折磨的死去活來了,而且還有關於c的指針這方面,感覺自己都是崩潰的;不過好在有老哥的幫助,總算是稍微入門了些,所以我也很清楚,光知道理論卻不知道怎么用的心情到底是怎么樣的,所以希望我的見解可以幫到大家,因為最近開始學習C++所以對於C都有些疏漏了,所以寫這個也是希望可以復習一下以前的知識;
指針數組:指針數組里儲存的都是指針變量;
形式 :數據類型 * 數組名稱[數組長度]
如同定義的那樣,數組里儲存的都是指針;
#include <stdio.h>
#include <strinh.h>
#include <stdlib.h>
int main()
{
char *a[30];//建立一個指針數組,然后建立兩個一級指針
char *b;
char *c;
a[1] = b;
a[2] = c;
b[0] = (char *)malloc(64);
b[1] = (char *)malloc(124);
strcpy(b[0],"aaa");
strcpy(b[1],"bbb");
printf("%s\n",b);//打印出 aaa
printf("%s\n",c);//打印出 bbb
return 0;
}
我們可以發現可以通過指針數組給一級指針分配內存空間,並且操控一級指針的空間,這個效果就和二級指針一樣;
{
char **a;
char *b;
a =&b;
*a = (char *)malloc(sizeof(char)*64);
}
於是我們可不可將指針數組的首地址傳遞給二級指針呢?
{
char *a[30];//建立一個指針數組,然后建立兩個一級指針
char *b;
char *c;
char **d;//建立一個二級指針
int i = 0;
b= (char *)malloc(64);
c = (char *)malloc(64);
a[0] = b;
a[21 = c;
strcpy(b[0],"aaa");
strcpy(b[1],"bbb");
d = b;//將數組b的頭地址賦給d
for(i = 0;i < 4 ;i++)
{
printf('%s\n",*(d+i))//我們可以發現 aaa 和 bbb被打印出來
}
}
我們發現把指針數組的地址傳遞給二級指針后同樣可以操作一級指針的內存空間;d = b 這里大家可能有疑問,不知道具體意思,我們知道數組的地址和它的首地址是一樣的,即b即使數組的首地址,這個首地址里儲存的就是一級指針的地址,於是我們將指針數組指針賦給了二級指針之后,通過*(d+0)或者d[0]可以取出儲存在里面的地址,即是一級指針的地址,然后通過一級指針操控內存空間;