關於函式指標陣列與返回陣列指標的函式
2007-08-15 08:34
int (*a)(int);
int (*p())[10];
第一種情況為陣列裡面是函式指標的情況,因為(int (*)(int))是乙個強制轉換方式, 將裡面的a這個陣列轉換成了乙個函式指標的陣列, 並且該函式是乙個帶乙個整型變數,並且返回乙個整型的函式.
第二種情況為函式返回的為指向乙個一維陣列的指標的情況. 因為(int (*)[10])將其強制轉換成了乙個指標,而該指標則是乙個指向一維陣列的指標.
分別舉兩個例子進行說明:
對於第一種函式指標陣列的情況,如下:
#include
int fun(int a)
int main()
p[10]為乙個指標陣列,而該指標陣列裡面的值為函式指標型別.讓p[0]指向fun()函式.然後再進行呼叫,就可以呼叫到fun()這個函式了.
對於第二種返回陣列指標的函式,如下:
#include
#include
int (*p())[10]
for (i = 0; i < 10; i++)
*(*m+i) = i+1;
return m;
}int main()
其實int (*m)[10];這種方式一般是用來指向乙個二維陣列的,例如
int b[4][10];
int (*m)[10] = b;
其指向二維陣列中的一維.
使用*(*(m+i)+j);這種方式就可以訪問b[i][j]這個元素.而上面的是使用這種方式來指向乙個一維陣列,同樣也是一樣的.只是前面的*(m+i)中的i變為0了.因為只有一維大小.即
int a[10];
int (*m)[10] = &a;
就使得m指向了a這個陣列了.而平時所用的int *p = a;只是讓p指向了a的第乙個元素.比前面的指向一維陣列的指標少了一維.前面的m+1跳過的是10個整型的長度.而後面的p+1則只是跳過了1個整型的長度.
原文出處:http://hi.baidu.com/phps/blog/item/38bec9bf93b3470818d81f78.html
函式指標陣列與返回陣列指標的函式
int a int int p 10 第一種情況為陣列裡面是函式指標的情況,因為 int int 是乙個強制轉換方式,將裡面的a這個陣列轉換成了乙個函式指標的陣列,並且該函式是乙個帶乙個整型變數,並且返回乙個整型的函式.第二種情況為函式返回的為指向乙個一維陣列的指標的情況.因為 int 10 將其強...
c指標陣列與陣列指標與指標函式與函式指標筆記
include include typedef struct t ooxx t ooxx,pt ooxx 測試陣列指標 void test ooxx arrayp t ooxx p int num 測試指標陣列 void test ooxx parray t ooxx p,int num 測試函式指...
關於指標陣列指標做為返回型別的函式
今天被一哥們叫了看了一段程式。裡面有這樣一段 c c code int func int n 3 反應如下 這是乙個陣列。這是乙個指標陣列。這是乙個函式指標陣列。到後面又看到然後有這樣的用法 c c code func n temp 這難道是乙個函式?那麼 3 又表示什麼呢。然後就分析了下。後來才發...