陣列與指標
一個變數有地址,一個數組包含若干個元素,每個陣列元素都在記憶體中佔用儲存單元,它們都有相應的地址。
指標變數既可以指向變數,也可以指向陣列元素(把某一元素的地址放在一個指標變數中)。
所謂陣列元素的指標就是陣列元素的地址。
定義一個指向陣列元素的指標變數的方法,與指向變數的指標變數相同。
例:int a[10];
int *p;
p=&a[0];
注:若陣列為int型,則指標變數的基型別也為int型。
引用一個數組元素,可以用:
(1)下標法,如a[i]形式;
(2)指標法,如*(a+i)或*(p+i)。
基中的a是陣列名,p是指向陣列元素的指標變數,其初值p=a等價於p=&a[0]。
注:陣列名即編譯為陣列的第一個元素的地址。
例:輸出陣列中的全部元素。
假設一個a陣列,整型,有10個元素,要輸出個元素的值有三種方法。
(1)下標法。
(2)通過陣列名計算陣列元素地址,找出元素的值。
(3)用指標變數指向陣列元素。
下標法:
#include <stdafx.h> #include<stdio.h> void main() { int a[10],i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } printf("\n"); for(i=0;i<10;i++) { printf("%d",a[i]); } }
指標法:
#include <stdafx.h> #include<stdio.h> void main() { int a[10],i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } printf("\n"); for(i=0;i<10;i++) { printf("%d",*(a+i)); } }
指標變數法:
#include <stdafx.h> #include<stdio.h> void main() { int a[10],i,*p; for(i=0;i<10;i++) { scanf("%d",&a[i]); } p=a; printf("\n"); for(i=0;i<10;i++) { printf("%d",*p); p++; } }
思考:
#include <stdafx.h> #include<stdio.h> void main() { int a[10],i,*p; p=a; for(i=0;i<10;i++) { scanf("%d",&p++); } printf("\n"); for(i=0;i<10;i++,p++) { printf("%d",*p); } }
錯誤原因:&後必須接函式指示符
糾正:第十行改為 scanf( " %d ",&p+i);