精华内容
下载资源
问答
  • 向函数传递一维数组
    2021-10-27 10:20:47

    【例8.4】从键盘输入某班学生某科成绩(每班人数不超过40人,具体由键盘输入),求其平均分。

    #include<stdio.h>
    ​
    #define N 40
    ​
    int Average(int score[],int n);
    ​
    void ReadScore(int score[],int n);
    ​
    int main()
    ​
    {
    ​
    •    int score[N],aver,n;
    ​
    •    printf("Input n:");//输入有多少个学生的数据,即score的实际长度
    ​
    •    scanf("%d",&n);
    ​
    •    ReadScore(score,n);//数组名字作为函数实参调用函数
    ​
    •    aver = Average(score,n);
    ​
    •    printf("Average score is %d \n",aver);
    ​
    ​
    ​
    •    return 0;
    ​
    }
    ​
    //计算学生的平均分
    ​
    int Average(int score[],int n)
    ​
    {
    ​
    •    if (n<=0) return -1;//判断是否有非法输入
    ​
    •    int i,sum=0;
    ​
    •    for(i=0;i<n;i++)
    ​
    •   {
    ​
    •        sum+=score[i];
    ​
    •   }
    ​
    •    return n>0?sum/n:-1;//判断是否有非法输入
    ​
    }
    ​
    //输入学生的成绩
    ​
    void ReadScore(int score[],int n)
    ​
    {
    ​
    •    int i;
    ​
    •    printf("Input score:");
    ​
    •    for ( i = 0; i < n; i++)
    ​
    •   {
    ​
    •        scanf("%d",&score[i]);
    ​
    •   }
    ​
    }
    
    
    
    • 若要把一个数组传递给一个函数,那么只要使用不带方括号的数组名即可,因为数组名就代表了数组第一个元素的地址,实际上就是将数组的地址传给被调函数。

    • 将数组的首地址传给被调函数后,实参和形参占据的是同一段存储单元,因此,当被调函数修改形参数组元素时,实际上相当于修改实参数组的元素值。

    • tips:数组的长度可以不出现在数组后面的方括号内,通常用另一个形参来指定数组长度。如果方括号内出现正数,编译器并不会生成相应长度的数组,也不会进行越界检查;当方括号内出现负数则编译错误。数组名后的方括号内数字不能表示真正接收数组的大小。

    更多相关内容
  • C-向函数传递一维数组和二维数组

    千次阅读 2018-12-21 17:00:13
    其实注意的点就是把一维数组和二维数组当作参数传递。 数组作为函数实参时,只传递数组的地址(首地址),并不传递整个数组的空间。 当用数组名作为实参调用函数,数组首地址指针就被传递函数中。 一维数组: ...

    其实注意的点就是把一维数组和二维数组当作参数传递

    数组作为函数实参时,只传递数组的地址(首地址),并不传递整个数组的空间。

    当用数组名作为实参调用函数,数组首地址指针就被传递到函数中。

    一维数组:

    在main函数之前声明时。

    这三种声明的方式都对。因为指针和数组的关系很密切,*y 就能代表这个数组首地址,

    漏了这种直接一个[]的也行。2333

    这种在书写函数的时候下面两种都行

     

     

    不过在书写函数的时候就得用指针来代替数组了。这是比较super的写法

    正常的写法:

     

    不过调用方法时传递的参数都是数组名

    ------------------------------------------------------------------------------------------------------------

    二维数组:一般数组里第一个参数不写,只写第二个参数

    正常写法:

    要玩花里胡哨的话:把数组里第一个参数先声明一下就行。和我之前写的

    差不多

     

     

     

     

     

     

    展开全文
  • 声明:该编译器为vs,所以输入函数写为scanf_s形式! 代码如下: #include <stdio.h> #define N 40 int ReadScore(int score[]); int FindMax(int score[], int n); int Average(int score[], int n); int ...

    声明:该编译器为vs,所以输入函数写为scanf_s形式! 

    代码如下:

    #include <stdio.h>
    #define N 40
    int ReadScore(int score[]);
    int FindMax(int score[], int n);
    int Average(int score[], int n);
    int main()
    {
    	int score[N], max, n;
    	n = ReadScore(score);
    	printf("Total students are %d\n", n);
    	max = FindMax(score, n);
    	printf("The hight score is %d\n", max);
    	printf("The average score is %d", Average(score,n));
    	return 0;
    }
    int ReadScore(int score[]) {
    	int i = -1;
    	printf("Input score:\n");
    	do {
    		i++;
    		scanf_s("%d", &score[i]);
    	} while (score[i] >= 0);
    	return i;
    }
    int FindMax(int score[], int n) {
    	int max, i;
    	max = score[0];
    	for (i = 1; i < n; i++) {
    		if (score[i] > max) {
    			max = score[i];
    		}
    	}
    	return max;
    }
    int Average(int score[], int n) {
    	int i, sum = 0;
    	for (i = 0; i < n; i++) {
    		sum = sum + score[i];
    	}
    	printf("sum=%d\n", sum);
    	return n > 0 ? sum / n : -1;
    }
    

    运行结果如下:

     

     以上只是个人观点,如有错误和不足,请指出!

     

    展开全文
  • 在C语言中,向函数传递参数只有一种形式——值传递。不管是传递一个整型变量,还是传递一个指针,函数得到的都只是实参的拷贝值。先定义一个一维整型数组: int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };首先明确...

    一维数组

    在C语言中,向函数传递参数只有一种形式——值传递。不管是传递一个整型变量,还是传递一个指针,函数得到的都只是实参的拷贝值

    先定义一个一维整型数组:

        int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    首先明确一点:数组名和指针是两个不同的概念,尽管数组名在绝大部分情况下被隐式转换成指针使用。
    我们没办法真正地把数组传递给函数,我们只能传递一份指向数组起始位置的指针的拷贝

    函数原型:

    void func(int *a);
    void func(int a[]);

    在当前这个上下文环境中,二者等价。你可以使用任何一种声明,如果要说哪一种最准确,应该是第一种。因为实参实际上是个指针,而不是数组。

    这样我们就把指向数组首元素的指针的拷贝传递给了函数。在实际应用中,我们通常还会传递另一个参数,用来表示数组的长度:

    void func(int *a, int len);

    通过第二个参数,我们可以很方便地在函数内遍历这个数组:

    void func(int *a, int len) {
        int i = 0;
        while (i < len) {
            printf("%d ", a[i]);
            i++;
        }
    }
    
    func(a, 10); // 打印数组a的所有元素

    二维数组

    接下来是二维数组,传递二维数组参数有更多需要注意的点。
    先定义一个二维整型数组:

    int b[2][3] = { 
        {0, 1, 2}, 
        {3, 4, 5}
    };

    我们实际上要向数组传递一个指向数组首元素的指针的拷贝,首先必须搞清楚数组名b的类型应该是:

    int (*)[3]

    数组名的类型取决于数组元素,数组b长度是2,每个元素是长度为3的整型数组,所以b的类型是上面那坨(如果这里有疑问可以看我的另一篇文章《彻底弄懂C语言数组名》)。
    如果上面的内容没有疑问,那么就来看函数原型:

    void func2(int (*p)[3]); // 两种都可以,第一种更准确
    void func2(int p[][3]);

    同样地,我们可以传递另外两个参数,分别表示行数和列数:

    void func2(int (*p)[3], int len_i, int len_j);

    但是请千万注意:写成二级指针是错误的!

    void func2(int **p); // 不可以这样~>_<~

    为什么不行呢?因为指向指针的指针和指向数组的指针是不同的。如果这样写,有可能你的程序能正确运行,但也有可能因为寻址错误导致程序崩溃哦!

    下面给出完整的例子:

    #include <stdio.h>
    
    void func2(int (*p)[3], int len_i, int len_j);
    
    int main() {
        int a[2][3] = { 
            {0, 1, 2}, 
            {3, 4, 5}
        };
    
        func2(a, 2, 3);
    
        return 0;
    }
    
    void func2(int (*p)[3], int len_i, int len_j) {
        int i, j;
        for (i = 0; i < len_i; i++) {
            for (j = 0; j < len_j; j++) {
                printf("%d ", p[i][j]);
            }
            printf("\n");
        }
    }

    这里写图片描述


    但是,不知道你有没有发现一个问题,我们必须在函数原型中指定第二维的大小,这意味着函数不能复用。为了向函数传递一个大小未知的数组,我将介绍两种技巧。

    第一种是通过void *指针接收一个数组,同时传递两个参数标记行和列,然后在函数内部将void *指针强制转换成二维数组。

    还有一种技巧叫做压扁数组(flattening the array),是通过一级指针遍历二维数组的方法。只要数组在内存中连续,这个技巧就可以用。我将在下一篇文章中详细介绍这个技巧。

    展开全文
  • C/C++函数传递维数组

    千次阅读 2020-11-20 10:38:31
    2.根据数组的存储原理把二位数组当作一维数组来操作(降维处理) 函数参数传递二维数组的问题 将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由...
  • c语言中经常需要通过函数传递维数组,有三种方法可以实现,如下: 方法, 形参给出第二维的长度。 例如: #include void func(int n, char str[ ][5] ) { int i; for(i = 0; i < n; i++) printf("/nstr...
  • 如定义个二维数组类型(如int型的数组):typedef int twoarray[max][max]; /*max为数组的范围,以后就可以用twoarray定义二维数组了。如果要定义个三维数组类型(如float型的数组):typedef float threearray[max]...
  • 函数传递一维数组

    2016-10-07 21:24:00
    #include void fun( int * a, int num) { for ( int i = 0 ; i ; ++ i) { std::cout [i] " " ; } } int main() { int a[ 5 ...数组名弱化为指针 return 0 ; }  
  • 举例子: int data[3][4] ={ {1,2,3,4} , {5,6,7,8} , {9,10,11,12} };...data 是数组名,该数组有3个元素,第个元素本身又是数组,有4个int 值组成。 因此,data的类型是指向4个int组成的数...
  • C语言如果给函数传递维数组作为参数问题的产生先看个传递二维数组的例子:#include void foo(int a[][], int m, int n) {int i = 1;int j = 1;printf("a[%d][%d]=%d\n", i, j, a[i][j]);}int main() {int a[2][3...
  • 函数传递维数组方法

    千次阅读 2019-04-18 20:55:51
    二维数组这样定义的时候:int x[n][m]感觉就不再是一个真正意义上的数组了,因为没有办法通过头指针进行访问,传递的时候编译器报错没有这个函数,...这样的话,就按定义一维数组的方法进行定义,然后规定大小。 ...
  • 先展示一下函数一维数组传递方法 void ControlArray1(int *a){//此为用指针接收数组首地址 for(int i=0;i<=5;i++) a[i]=i; } void ControlArray2(int b[]){ for(int i=0;i<=5;i++) b[i]=i; } void ...
  • 1.将二维数组压缩成一维数组,然后就可以正常用指针了,用的时候注意一下二维与一维的坐标变换就可以;(我没用,因为我代码已经写好了,不想改!) 2.传二维数组,如 short gmmse(short H[4][4]),这种用起来也没...
  • 在C/C++中,对于单个数或者对于一维数组的处理相对来说比较简单,但是对于二位数组或者多为数组就会比较困难。这里我们将介绍两种传递数组数据的两种方法,读者如有更好的方法,欢迎讨论区评论。 1.对于不喜欢指针...
  • 有 4 种方式 void f1(int a[N][M]); void f2(int a[][N]); void f3(int (*a)[N]);...* 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * *********************************/ void print_a(int a[][5], i
  • 例: #include #include int print_aaaaa(int a[][2],int m,int n) { printf("a[%d][%d] : %d\n",m,n,a... } 注意:将二维数组传递函数时,必须指定二维数组的列数,因为函数再处理二维数组是以一维数组的格式处理的
  • 问题背景:从键盘输入某班学生某梦课程的成绩,(假设每班人数最多不超过40人,具体人数从键盘输入),试编程计算其平均分。.../*ave()函数原型*/ void readscore(int score[],int n);/*readscore函数原型*/ int m...
  • c语言 函数传入二维数组的方法

    千次阅读 2022-03-12 12:53:32
    不使用指针传入二维数组: int fun(int n,int m,int a[n][m]){ .......代码 } int main(){ int n,m; scanf("%d %d",&n,&m); int a[n][m]; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ scanf...
  • //你的值被传递后,才能print数组 } void main() { FILE *wf; int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}}, i, j; int a[100]={0},n=0 ; printf("The matrix:\n"); for (i=0; i; i++) {for ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,443
精华内容 32,177
热门标签
关键字:

向函数传递一维数组

友情链接: SPIHT.rar