辨析陣列名和指標

2021-08-20 14:37:13 字數 1180 閱讀 1317

陣列是變數,變數名代表整個變數,主要體現在取位址+1跨越的是整個變數的大小。指標變數進行運算

int (*p)[10];  //陣列指標

int *p[10]; //指標陣列

int (*p[10])(); //函式指標陣列

int (*p)(); //函式指標

int (*(*p)[10])(); //指向函式指標陣列的指標

思考這類問題,要對運算子的優先順序和結合方向有清楚的把握。從使用的角度看,越是常用的運算子優先順序越高。下標運算子優先順序高於指標運算子。

指標的定義方式為型別名 *變數名。因為指標運算子的結合方向是從右至左的,所以,我們定義的是指標變數。型別視情況而定。如下所示。

int *ar[10];  //指標陣列

int* (*p)[10] = &ar; //指向指標陣列的指標

int* (&a)[10] = ar; //對指標陣列的引用

int**s = ar; //指向陣列首元素的指標

陣列理解為一種聚合型別,實際上並不存在陣列型別,但是我們理解有這樣的一種型別。物以類聚人以群分,陣列中的所有元素型別是一樣的。二維陣列容納一維陣列的行為理解為以一維陣列作為其元素。 

int ar[3][4];    /定義乙個二維陣列

int(*p)[3][4] = &ar; //指向二維陣列的指標

int(&a)[3][4] = ar; //對二維陣列的引用

int(*s)[4] = ar; //指向一維陣列的指標

int arr[2] = ,,,,,};

int *s = (int *)&arr[0][1];

int (*p)[2] = &arr[0]; //指向一維陣列的指標。

想在函式中改變呼叫者函式體內的變數值,只能使用位址傳遞。但是我們需要警惕,傳遞位址時,a和b指向同乙個變數的特殊情況。如果不加以判斷,最終導致兩個變數值均為0。解決辦法是在在外套一層if判斷就可以。

void exchange(int *a, int *b)

}

void exchange(int *a, int *b)

}

陣列名和指標

c c 陣列名與指標區別深層探索 看了這篇文章之後,終於將混淆了很久的概念搞清楚了。1 陣列名的內涵在於其指代的實體是一種資料結構,其資料結構就是陣列 2 陣列名的外延在於其可轉換為指向其指代實體的指標,而且是乙個指標常量 3 指向陣列的指標則是另外一種變數型別,僅僅意味著陣列的存放位址。陣列名在作...

陣列名和指標

問 陣列名不是首元素的指標咩,為什麼sizeof陣列名能夠知道陣列長度?答案 陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 這種誤解的根源在於國內某著名的c程式設計教程...

陣列名和指標

參考 參考 int array 10 array 錯,只有當陣列退化為指標才能有自增操作。因為1.sizeof操作符的結果型別是size t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。2.sizeof是算符,strlen是函式。3....