在本教程中,您將了解C語言編程中數(shù)組與指針之間的關系。您還將學習使用指針訪問數(shù)組元素。
在了解數(shù)組與指針之間的關系之前,請確保檢查以下兩個主體:
數(shù)組是一個順序數(shù)據(jù)塊。讓我們編寫一個程序來打印數(shù)組元素的地址。
#include <stdio.h> int main() { int x[4]; int i; for(i = 0; i < 4; ++i) { printf("&x[%d] = %p\n", i, &x[i]); } printf("x數(shù)組的地址: %p", x); return 0; }
輸出結果
&x[0] = 1450734448 &x[1] = 1450734452 &x[2] = 1450734456 &x[3] = 1450734460 x數(shù)組的地址: 1450734448
數(shù)組x的兩個連續(xù)元素之間相差4個字節(jié)。 這是因為int的大小為4個字節(jié)(在我們的編譯器中)。
請注意,地址&x[0]和x是一樣的。這是因為變量名x指向數(shù)組的第一個元素。
從上面的示例中可以明顯看出,&x[0]它等效于x。并且,x[0]等效于*x。
同樣,
&x[1]等同于x+1 和 x[1]等同于*(x+1)。
&x[2]等同于x+2 和 x[2]等同于*(x+2)。
...
基本上&x[i]等同于x+i 和 x[i]等同于*(x+i)。
#include <stdio.h> int main() { int i, x[6], sum = 0; printf("輸入6個數(shù)字: "); for(i = 0; i < 6; ++i) { // 等效于scanf("%d", &x[i]); scanf("%d", x+i); // 等同于 sum += x[i] sum += *(x+i); } printf("總和 = %d", sum); return 0; }
運行該程序時,輸出為:
輸入6個數(shù)字: 2 3 4 4 12 4 總和 = 29
在這里,我們聲明了一個包含6個元素的數(shù)組x。為了訪問數(shù)組的元素,我們使用了指針。
在大多數(shù)情況下,數(shù)組名稱會衰減為指針。簡而言之,數(shù)組名稱將轉換為指針。這就是為什么您可以使用指針訪問數(shù)組元素的原因。但是,您應該記住,指針和數(shù)組并不相同。
在某些情況下,數(shù)組名稱不會衰減到指針。
#include <stdio.h> int main() { int x[5] = {1, 2, 3, 4, 5}; int* ptr; //ptr被分配了第三個元素的地址 ptr = &x[2]; printf("*ptr = %d \n", *ptr); // 3 printf("*(ptr+1) = %d \n", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; }
運行該程序時,輸出為:
*ptr = 3 *(ptr+1) = 4 *(ptr-1) = 2
在此示例中,第三個元素的地址&x [2]被分配給ptr指針。 因此,當我們打印* ptr時顯示3。
并且,輸出*(ptr+1)得到第四個元素。類似地,輸出*(tr-1)將得到第二個元素。