c/c++第十三天

来源:互联网 发布:物理tracker软件 编辑:程序博客网 时间:2024/06/05 05:10

数组作为函数的参数

#include<stdio.h>void fun();void main(){    int a[3]={1,2,3};    fun(a);    printf("%d",a[2]);}void fun(int a[]){    a[2]=0;}

结果:1 2 0
数组作为参数传递时,形参改变的是原地址上的值。

数组指针
问题:有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。

#include<stdio.h>void fun1();void fun2();void main(){    float a[3][4];    float *p=&a[0][0];    //替换成 float *p=a 会报错    for(int i=0;i<=2;i++){        printf("输入第%d个学生四门成绩:\n",i+1);        for(int j=0;j<=3;j++){            scanf("%f",&a[i][j]);            fflush(stdin);        }    }    fun1(a);    fun2(p);}void fun1(float *p){    float t=0;    for(int i=0;i<=2;i++){        float s=0;        for(int j=0;j<=3;j++){            s+=*(p+i*4+j);        }        t+=s/4;    }    printf("总平均分数:%f\n",t);}void fun2(float *p){    int n;    printf("输入n,查看第n个学生成绩:");    scanf("%d",&n);    for(int i=0;i<=3;i++){        printf("%f\t",*(p+(n-1)*4+i));    }}

结果:
这里写图片描述
如果把 float *p=&a[0][0]; //替换成 float *p=a 会报错
这里写图片描述

这里可以用到指针数组

#include<stdio.h>void fun1();void fun2();void main(){    float a[3][4];    float (*p)[4]=a;    //数组指针    for(int i=0;i<=2;i++){        for(int j=0;j<=3;j++){            scanf("%f",&a[i][j]);            fflush(stdin);        }    }    fun1(a);    fun2(p);}void fun1(float (*p)[4]){    float t=0;    for(int i=0;i<=2;i++){        float s=0;        for(int j=0;j<=3;j++){            s+=p[i][j];        }        t+=s/4;    }    printf("总平均分数:%f\n",t);}void fun2(float (*p)[4]){    int n;    printf("输入n:");    scanf("%d",&n);    for(int i=0;i<=3;i++){        printf("%f\t",p[n-1][i]);    }}

float (*p)[4]=a; 定义了数组指针p指向二维数组a,[4]为数组第二维的长度。

函数指针
可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就意味着此指针变量指向该函数。如:

int (*p)(int i);
int (*p)();
void (*p)(int i);
void (*p)();

#include<stdio.h>int fun1(int a,int b){    return a+b;}void fun2(){    printf("0");}void main(){    int (*p1)(int a,int b);    p1=fun1;    printf("%d ",p1(1,2));    void (*p2)();    p2=fun2;    p2();}

结果:3 0

0 0
原创粉丝点击