- void fun(char ** p)
- {
- char (*p1)[10] = (char(*)[10])p;
- cout << p1[0];
- }
- int main(int argc, char* argv[])
- {
- char data[][10] = {"abc","123"};
- fun((char **)data);
- }
p的類型在聲明形參的時候已經定義爲char**了,一旦定義後它的類型是不可改變的,但可以定義另一個具有char [][10]類型的變量,然後把p的值賦予它:
char (*p1)[10] = (char(*)[10])p;
這樣p1就可以使用p的值,並把p原本指向的對象類型看作char(*)[10]。
如果想把p以二維數組的形式引用,可以如下這麼做:
p = (char**)malloc(5*sizeof(char*));
for(i=0; i<=4; ++i) p[i] = (char*)malloc(10*sizeof(char));
這樣p就可以用p[i][j]的形式引用了,其中i<5,j<10。這種方法適合於本來沒有緩衝區而要新建一個的情況。如果本來已有緩衝區,那麼可以如下這麼做:
char *p1=....; //假設p1指向原來的緩衝區
p = (char**)malloc(5*sizeof(char*));
for(i=0; i<=4; ++i) p[i]=p1+10*i;
這樣p同樣可以p[i][j]的方式引用。但是,以上兩種方式,雖然p的外部引用方式跟一個二維數組一樣,但其類型仍然是char **,而不是char(*)[10]。