陣列與指標
陣列名(不包括形參陣列名,形引數組並不占用實際記憶體單元)代表陣列首元素(即序列號為0的元素)的位址。
int a[10];
int *p;
p=&a[0]=a; 把陣列名a的首元素的位址賦給指標變數p;
*p=1; 表示將1賦給p當前所指向的陣列元素;
p+1 ->指向同乙個陣列的下乙個元素,此處不是簡單的加1,而是根據p指標所屬的資料型別,加上乙個單位的步長,例如陣列元素是float型,每個元素佔4個位元組,則p+1指p的值加上四個位元組。
(1) 如果p=&a[0]=a;則p+i = a+i =&a[i]是a[i]的位址;
(2) *(p+i)或*(a+i)是p+i或者a+i所指向的陣列元素,即a[i];
(3) 指向陣列的指標變數也可以帶下標,如p[i]和*(p+i)等價;
引用陣列元素,可以使用:
(1) 下標法,如a[i]形式;
(2) 指標法,如*(a+i)或*(p+i),其中a是陣列名,p是指向陣列元素的指標變數;
*p++,由於++和*同優先順序,結合方向是自右向左,則等價於*(p++)
*(p++)作用:先得到p指向的變數的值(即*p),再使p+1=p;
例如:
for(i=0;i<10;i++,p++)
printf(「%d」,*p);
等價於 for(i=0;i<10;i++)
printf(「%d」,*p++);
*(p++)與*(++p)區別?
前者先取*p的值,然後使p加1;後者先使p+1,再取*p;
例:若p的初值為a(即&a[0]);則*(p++)為a[0],而*(++p)為a[1];
注:實參陣列名代表乙個固定的位址,或者說是指標常量,在執行過程中是固定不變得,
但形引數組並不是乙個固定的位址值,而是作為指標變數,在函式呼叫開始時,他的值等於是引數組首元素的位址,在函式執行期間,他可以再被
指標與陣列,指標陣列 陣列指標
int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...
指標陣列與陣列指標
1.指標陣列 指標陣列中每乙個元素都是乙個指標,也既是存放字串的首位址。所以指標陣列適合處理若干個長度不等的字串。定義的一般形式為 型別說明符 指標陣列名 陣列長度 例如 int p 3 宣告乙個陣列,指標陣列p,由3個int型別指標變數元素組成 從運算子的優先順序分析,由於 的優先順序大於 所以p...
指標陣列與陣列指標
呵呵,實在是厭倦了繞口的解釋。指標陣列,故名思義,就是指標的陣列,陣列的元素是指標 陣列指標,同樣,就是直想陣列的指標。簡單舉例說明 int p 2 首先宣告了乙個陣列,陣列的元素是int型的指標。int p 2 宣告了乙個指標,指向了乙個有兩個int元素的陣列。其實這兩種寫法主要是因為運算子的優先...