zoukankan      html  css  js  c++  java
  • 为什么用指针来引用数组元素?

    一直以来写程序,我都喜欢用数组下标来引用数组元素,因为比较直观,虽然知道可以用指针变量来引用数组元素,但是总感觉不太理解,不敢乱用,今天抽空看了下教材,有一点感悟,特摘抄过来。

    摘自谭浩强C程序设计(第三版)

    引用一个数组元素,可以用:

    (1)下标法:如a[i]形式;

    (2)指针法,如*(a+i)或*(p+i),其中a是数组名,p是指向数组元素的指针变量,其初值p = a;

    输出数组中的全部元素:数组a,整型,10个元素

    方法1:下标法

     1 #include <stdio.h>
     2 void main()
     3 {
     4      int a[10];
     5      int i;
     6      for(i =0; i<10; i++)
     7     {
     8             scanf("%d",&a[i]);
     9      }
    10      printf("
    ");
    11      for(i =0; i<10; i++)
    12      {
    13              printf("%d",a[i]);
    14       } 
    15      printf("
    ");      
    16 }        
    View Code

    方法2:通过数组名计算数组元素地址,找出元素的值

     1 #include <stdio.h>
     2 void main()
     3 {
     4      int a[10];
     5      int i;
     6      for(i = 0; i<10; i++)
     7      {
     8             scanf("%d",&a[i]);
     9 
    10       }
    11       printf("
    ");
    12       for(i=0; i<10;i++)
    13      {
    14            printf("%d",*(a+i));
    15      }  
    16      printf("
    ");
    17 }    
    View Code

    方法3:用指针变量指向数组元素

     1 #include <stdio.h>
     2 void main()
     3 {
     4      int a[10];
     5      int i,*p;
     6      for(i = 0; i<10; i++)
     7      {
     8             scanf("%d",&a[i]);
     9 
    10       }
    11       printf("
    ");
    12       for(p=a; p<(a+10);p++)
    13      {
    14            printf("%d",*p);
    15      }  
    16      printf("
    ");
    17 }  
    View Code

    比较:方法1和方法2执行效率是相同的,C编译系统先将a[i]转换成*(a+i)处理,即先计算元素地址,较费时。

    方法3,用指针变量直接指向元素,不必每次都重新计算地址,p++这种自加操作是比较快的,此方法效率最高。

  • 相关阅读:
    dsp
    vector.cpp introducing the vector template.
    Bookmarks
    C#多线程参数传递.cs
    vector操作笔记
    Paragma & Bytes
    今天开博
    一台linux服务器挂载另外一台linux服务器文件系统
    nginx基于mysql的身份验证
    Ubuntu下编译nginx
  • 原文地址:https://www.cnblogs.com/victoria-c/p/6256356.html
Copyright © 2011-2022 走看看