指標,陣列
指標和陣列沒有關係!!!!
指標陣列
指標陣列是陣列,是乙個存放指標的陣列
int *arr[10]; 因為[ ] 比 * 優先順序高,所以arr先和[ ]結合,所以它是乙個陣列
char *arr[10];
陣列指標
陣列指標是指標,指向乙個陣列的指標
int (*p)[10];
p是乙個指標變數,指向的是具有十個元素的整型陣列
然後我們來看這個:
int (*parr[10])[5];
*parr[10]; 是個指標陣列
int (*)[5]; 是個陣列指標
所以總體就是,它是乙個指標陣列,裡面的指標都指向五個元素的一維陣列
指標和陣列的定義和宣告
定義是不存在的東西要讓他存在,宣告是讓知道有這麼個東西的存在,又說宣告就是定義變數本身
之前我們宣告全域性變數的時候是這樣的: extren int a;
可是如果我們這麼寫:
char arr = "abcdef";
int main()
會輸出什麼呢?
這麼寫的話,因為char arr[ ];時arr是乙個七個元素的陣列,會開闢七個空間,但宣告時,會把arr當成指標來識別,別且只訪問四個位元組,如題,會將abcd賦給指標arr,並且會把abcd當成乙個位址
所以這麼寫不一定能執行。
如果定義成指標,宣告成陣列呢?
char *p = "abcdef";
extren char p[ ];
指標指向的是常量字串,且p是四個位元組的,在識別char型別陣列時,認為陣列大小是4。訪問陣列是,輸出的是p的位址的四個部分
所以不推薦這兩種寫法
函式指標
輸出結果:
所以,函式也是有位址的,而且函式名和&函式名都表示的是函式的位址
所以就有函式指標
int (* pfun)(); //指向返回值為int,引數列表為空的函式的指標
void (*pfun)(); //指向返回值為void,引數列表為空的函式的指標
跟陣列指標還是有點類似的,不過還要注意返回值,是不是想到了指標陣列。。 int *arr[10]
而 int *pfun(); //看清楚,這是個函式,返回值為整型指標的函式!!!!
來看這兩個:
(*(void (*)())0);
void (*signal(int, void(*)(int)))(int);
**1:(void (*)( )) 這一段,裡面是個函式指標,外面帶括號就是強制轉換,所以把0強制轉換成函式指標,再解引用,就是可以理解為 位址(); 這個樣子,這裡位址 == 0,因為上面提到過函式名就是它的位址,0( ); 這個後面帶括號帶封號,就是函式呼叫
**2:signal(....)是個函式,引數是int和函式指標,而signal函式的返回值是函式指標,這個指標指向的是返回值為void *,引數為int的函式
函式指標陣列
int (*parr[10]) ();
因為parr先河[ ] 結合,所以它是個陣列,其次又是個指標,最後是函式,所以是函式指標陣列
一類指標放在乙個陣列中,都會返回值為int,引數為空的函式
函式指標的陣列的指標
指向函式指標陣列的指標
乙個指標,指向的是乙個函式指標陣列
定義: void (*(*ppfunarr)[10])(const char*);
綜合對比:
函式指標 int (*pfun)(int,int);
函式指標陣列 int (*pfunarr[5])(int, int);
函式指標陣列的指標: int (*(*ppfunarr)[5])(int, int)
!!!!關鍵在於符號的優先順序!!!!
還有指向函式指標陣列指標陣列的指標等等可以無限延伸。。。不過**是寫給人看的,基本不會用到
指標陣列和陣列指標
有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...
指標陣列和陣列指標
理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...
指標陣列和陣列指標
該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...