C/C++ 一维数组与指针

1.数组指针
  数组的首地址称为数组指针。若定义整型数组a[5],系统为数组分配的地址从1000到1019,则数组a的首地址1000为数组a的数组指针。
C++规定,数组的首地址可用数组名a表示,因此,数组a的数组指针 =a =&a[0]。


2.数组指针变量
  存放数组元素地址的变量称为数组指针变量。如:
  int a[5];
  int *p = &a[0];
  则p为数组指针变量。在C++中数组名a可用于表示数组的首地址,所以数组名a可作为数组指针使用。
因此:p = a 与 p = &a[0] 的作用是相同的。
但数组名a不能用来进行赋值运算、”++”、”- -“等运算。
  当指针变量指向数组首地址后,就可使用该指针变量对数组中任何一个元素变量进行存取操作。


用指针变量访问数组元素。

 # include 
 void main(void) { 
    int a[5]={0,1,2,3,4};
    int i,j,*p,n=5;
  p=a;
  for (i = 0; i < n; i++) { 
        cout << *p << '\t'; 
    p++;
  } 
  cout << endl;
  p = a;
  for (i = 0; i < n; i++) cout << *(p+i) << '\t'; 
  cout << endl;
  for (i = 0; i < n; i++) cout << *(a+i) << '\t';
  cout << endl;
  for (i = 0; i < n; i++) cout << p[i] << '\t';
  cout << endl;
 }

执行程序后,输出:
  0 1 2 3 4
  0 1 2 3 4
  0 1 2 3 4
  0 1 2 3 4


由上例可以看出,访问数组元素值有三种方法:
  
(1)通过移动指针变量,依次访问数组元素。如:
   p=a;
   for (i = 0; i < n; i++) { cout << *p << ‘\t’; p++;}
  首先将指针变量p指向数组a的首地址。
然后用*p输出数组第i个元素的值,每次输出后用p++移动指针到下一个元素,依次循环直到结束。
注意:
cout << *p << ‘\t’; p++;
可合并为一条语句:cout << *p++ << ‘\t’;

(2)指针变量不变,用p+i或 a+i 访问数组第i个元素。如:
  for (i = 0; i < n; i++) cout << *(p+i) << ‘\t’;
  for (i = 0; i < n; i++) cout << *(a+i) << ‘\t’;
  在C++中允许用 p+i 或 a+i 表示第i个元素的地址。 因此,(p+i)与(a+i)均表示第i个元素的内容。
  
(3)以指针变量名作为数组名访问数组元素。如:
  for (i = 0; i < n; i++) cout << p[i] << ‘\t’;
  若用指针变量名p作为数组名,则p[i]表示数组的第i个元素a[i]。


综上所述,对一维数组a[ ]而言,当p=a后,有如下等同关系成立:
  ① p+i=a+i=&a[i],即p+i、a+i 均表示第i个元素的地址&a[i]。
  ② (p+i) =(a+i)=p[i]= a[i]。即(p+i), (a+i), p[i]均表示第i个元素值a[i]。
  其中p[i] 的运行效率最高。
  由上所述可知:一维数组的第i个元素可用四种方式引用,即: a[i]、(p+i) 、(a+i)、p[i]。

你可能感兴趣的:(c语言,C++语言,C语言,指针)