C 語言基礎教程

C 語言流程控制

C 語言函數(shù)

C 語言數(shù)組

C 語言指針

C 語言字符串

C 語言結構體

C 語言文件

C 其他

C 語言參考手冊

C 語言指針和數(shù)組

在本教程中,您將了解C語言編程中數(shù)組與指針之間的關系。您還將學習使用指針訪問數(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ù)組的第一個元素。

數(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)。

示例1:指針和數(shù)組

#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ù)組名稱不會衰減到指針。

示例2:數(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)將得到第二個元素。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清