字体
第(3/7)页
关灯
   存书签 书架管理 返回目录
p=a;

    for(i=0;i<10;i++)

    *p++=i;

    p=a;

    for(i=0;i<10;i++)

    printf("a[%d]=%d\n",i,*p++);

    }

    谭浩强      C 语言程序设计               2001 年 5 月 1 日

    3) 从上例可以看出,虽然定义数组时指定它包含 10 个元素,但指针变量可以指到数组以

    后的内存单元,系统并不认为非法。

    4) *p++,由于++和*同优先级,结合方向自右而左,等价于*(p++)。

    5) *(p++)与*(++p)作用不同。若 p 的初值为 a,则*(p++)等价 a[0],*(++p)等价 a[1]。

    6) (*p)++表示 p 所指向的元素值加 1。

    7) 如果 p 当前指向 a 数组中的第 i 个元素,则

    *(p--)相当于 a[i--];

    *(++p)相当于 a[++i];

    *(--p)相当于 a[--i]。

    10.3.3 数组名作函数参数

    数组名可以作函数的实参和形参。如:

    main()

    {int array[10];

    ……

    ……

    f(array,10);

    ……

    ……

    }

    f(int arr[],int n);

    {

    ……

    ……

    }

    array 为实参数组名,arr 为形参数组名。在学习指针变量之后就更容易理解这个问题

    了。数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得

    到该地址后也指向同一数组。这就好象同一件物品有两个彼此不同的名称一样。

    谭浩强      C 语言程序设计               2001 年 5 月 1 日

    同样,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可作为函

    数的参数使用。

    【例 10.15】

    float aver(float *pa);

    main(){

    float sco[5],av,*sp;

    int i;

    sp=sco;

    printf("\ninput 5 scores:\n");

    for(i=0;i<5;i++) scanf("%f",&sco[i]);

    av=aver(sp);

    printf("average score is %5.2f",av);

    }

    float aver(float *pa)

    {

    int i;

    float av,s=0;

    for(i=0;i<5;i++) s=s+*pa++;

    av=s/5;

    return av;

    }

    【例 10.16】将数组 a 中的 n 个整数按相反顺序存放。

    算法为:将 a[0]与 a[n-1]对换,再 a[1]与 a[n-2] 对换
上一页 目录 下一页