精华内容
下载资源
问答
  • 推荐答案雷晓东NANA2018.05.08采纳率:63%等级:39已帮助:99046人以数组名作为作为函数参数的具体含义如下,(1)用数组元素作实参时,只要数组类型和函数的...用数组名作函数参数时,则要求形参和相应的实参都必须是...

    推荐答案

    fec4a5660110adb1a0cd4dffb7d52196.png

    雷晓东NANA

    2018.05.08

    fec4a5660110adb1a0cd4dffb7d52196.png

    采纳率:63%    等级:39

    已帮助:99046人

    以数组名作为作为函数参数的具体含义如下,(1)用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的。因此,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。用数组名作函数参数时,则要求形参和相应的实参都必须是类型相同的数组,都必须有明确的数组说明。当形参和实参两者类型不一致时,机会发生错误。(2)在用数组名做函数参数时,不是进行值的传递,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。用普通变量或下标变量作函数参数时,形参变量和实参变量都是由编译系统分配的两个不同的内存单元。在函数调用时进行的值传递是把实参变量的值赋予形参变量。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传递是如何实现的?因为数组名就是数组的首地址。因此用数组名做函数参数时所进行的传递实际上是地址的传递,也就是把实参数组的首地址赋予形参数组名。形参数组名取得该首地址后,也就等于有了具体的地址。实际上是形参数组和实参数组为同一数组,共同使用一段内存空间。此外,需注意以下几点,(1)如果形参是数组形式,则实参必须是实际的数组名,如果实参是数组名,则形参可以是同样维数的数组名或指针。(2)要在主调函数和被调函数中分别定义数组。(3)实参数组和形参数组必须类型相同,形参数组可以不指明长度。(4)在C语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址,因此,当数组名作函数参数时,实参与形参之间不是"值传递",而是"地址传递",实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元,编译系统不再为形参数组分配存储单元。

    00分享举报

    此回答由管理员  理科爱好者cdb   推荐为最佳回答。

    展开全文
  • 题目概述:有一个一维数组score,内放10个学生成绩,求平均成绩 编程: #include<stdio.h> int main() { float average(float arrary[10]); float score[10],aver; int i; printf(“input 10 scores:\n”); ...

    题目概述:有一个一维数组score,内放10个学生成绩,求平均成绩
    编程:
    #include<stdio.h>
    int main()
    {
    float average(float arrary[10]);
    float score[10],aver;
    int i;
    printf(“input 10 scores:\n”);
    for(i=0;i<10;i++)
    scanf("%f",&score[i]);
    aver=average(score);
    printf(“average score is %f\n”,aver);
    return 0;
    }
    float average(float arrary[10])
    {
    int i;
    float aver,sum=array[0];
    for(i=1;i<10;i++)
    sum=sum+array[i];
    aver=sum/10;
    return(aver);
    }
    上机实践:
    在这里插入图片描述

    展开全文
  • 学习笔记1:用数组元素作函数实参 编程:判别个整数数组a[10]={1,2,3,4,-1,-2,-3,-4,2,3}中各元素的值,若大于0则输出该值,若小于等于0则输出0 #include <stdio.h> void test(int v); void main() { int...

    学习笔记1:用数组元素作函数实参

    编程:判别一个整数数组a[10]={1,2,3,4,-1,-2,-3,-4,2,3}中各元素的值,若大于0则输出该值,若小于等于0则输出0

    #include <stdio.h>
    void test(int v);
    void main()
    {
        int a[10] = { 1,2,3,4,-1,-2,-3,-4,2,3 };
        int i;
        for (i = 0; i < 10; i++)
        {
            test(a[i]);
        }
        printf("\n");
    }
    void test(int v)
    {
        if (v > 0)
        {
            printf("%d", v);
        }
        else
        {
            printf("%d", 0);
        }
    }

    运行结果:

    学习笔记2:用数组名作函数参数

    编程:

    #include <stdio.h>
    void test(int b[10]);
    void main()
    {
        int a[10] = { 2,4,6,8,10,12,14,14,18,20 };
        test(a); 
    // 把a的地址传回去给上面的test(int b[10]),让b也指向a的地址
        putchar('\n');
    }
    void test(int b[10])
    {
        int i = 0;
        for (; i < 10; i++)
        {
            printf("%d ", b[i]);
        }
    }

    运行结果:

    题目:
    一个一维数组score,内放10个学生成绩,求平均成绩(写一个average函数求平均成绩)

    答案:
    #include <stdio.h>
    double average(double array[10]);
    void main()
    {
        double score[10] = { 82,100,87.5,89,78,85,67.5,92.5,93,94 }, result;
        result = average(score);
        printf("average score is %5.2lf\n", result);
        putchar('\n');
    }
    double average(double array[10])
    {
        double result = 0;
        int i = 0;
        for (i = 0; i < 10; i++)
        {
            result += array[i];  
    //等同于result = result + array[i]
        }
        result /= 10;  
    //等同于result = result/10 
        return result;
    }

    运行结果:

    学习笔记3:全局变量

    题目:一个一位数组,内放10个学生成绩,写一个函数,求出平均分、最高分、最低分

    答案:

    #include <stdio.h>
    float Max = 0, Min = 0;
    void main()
    {
        float average(float array[], int n);
        float ave, score[10];

        int i;
        for (i = 0; i < 10; i++)
        {
            scanf("%f", &score[i]);
        }

        ave = average(score, 10);
        printf("Max=%6.2f\nMin=%6.2f\naverage=%6.2f\n", Max, Min, ave);
    }
    float average(float array[], int n)  
    //定义函数,形参维数组
    {
        int i;
        float aver, sum = array[0];
        Max = Min = array[0];

        for (i = 1; i < n; i++)
        {
            if (array[i] > Max)
                Max = array[i];
            else if (array[i] < Min)
                Min = array[i];
            sum += array[i];
        }
        aver = sum / n;

        return aver;
    }

    运行结果:

    展开全文
  • 可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以可以指 定所有维数的大小,也可以省略第一维的大小说明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合法...

    可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以可以指

    定所有维数的大小,也可以省略第一维的大小说明,如:
    void Func(int array[3][10]);
    void Func(int array[][10]);
    二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是

    不合法的:
    void Func(int array[][]);
    因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),

    而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能

    只指定一维而不指定第二维,下面写法是错误的:
    void Func(int array[3][]);实参数组维数可以大于形参数组,例如实参数组定义为


    void Func(int array[3][10]);
    而形参数组定义为:
    int array[5][10];
    这时形参数组只取实参数组的一部分,其余部分不起作用。

    大家可以看到,将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的

    ,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。大家在学编译原理

    这么课程的时候知道编译器是这样处理数组的:

    对于数组 int p[m][n];
    如果要取p[i][j]的值(i>=0 && i<m && 0<=j && j < n),编译器是这样寻址的,它的

    地址为:
    p + i*n + j;

    从以上可以看出,如果我们省略了第二维或者更高维的大小,编译器将不知道如何正确

    的寻址。但是我们在编写程序的时候却需要用到各个维数都不固定的二维数组作为参数,

    这就难办了,编译器不能识别阿,怎么办呢?不要着急,编译器虽然不能识别,但是我们

    完全可以不把它当作一个二维数组,而是把它当作一个普通的指针,再另外加上两个参数

    指明各个维数,然后我们为二维数组手工寻址,这样就达到了将二维数组作为函数的参数

    传递的目的,根据这个思想,我们可以把维数固定的参数变为维数随即的参数,例如:

    void Func(int array[3][10]);
    void Func(int array[][10]);
    变为:
    void Func(int **array, int m, int n);

    在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为

    编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子

    手工转变为

    *((int*)array + n*i + j);

    在调用这样的函数的时候,需要注意一下,如下面的例子:
    int a[3][3] =
    {
    {1, 1, 1},
    {2, 2, 2},
    {3, 3, 3}
    };
    Func(a, 3, 3);

    根据不同编译器不同的设置,可能出现warning 或者error,可以进行强制转换如下调用


    Func((int**)a, 3, 3);

    展开全文
  • 维数组如何做实参

    千次阅读 2015-08-15 17:53:46
    在做题过程中发现,有时候需要将个二维数组传递到另外函数中去。 假如为栈数组,可以这样做: void Fun(int* dp, int m, int n) { if(*((dp+i*n)+j)==3) { //*((dp+i*n)+j)为dp[i][j] ...... } } ...
  • 对于方法一建立的数组,参考谭浩强《C程序设计》的方法:用多维数组名作为函数实参和形参,在被调用函数中对形参组定义时可以指定每一维的大小,也可以省略第一维的大小说明。例如: int array[3][10]; 或 int ...
  • 可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合法而且...
  • 书上说, 当二维数组名作为实参时,对应的形参必须是一个行指针变量。如 #include<stdio.h> #define M 5 #define N 3 ... 一维数组形式作形参, 二维数组形式作形参 都不会有越界问题吗????
  • 数组名作函数参数

    千次阅读 2019-05-31 18:46:10
    关于用数组名作函数参数有两点要说明: (1) 如果函数实参是数组名,形参也应为数组名(或指针变量),形参不能声明...因此用数组名作函数实参时,不是把实参数组的值传递给形参,而只是将实参数组首元素的地址传递给形参。...
  • 1.用数组元素作实参时,向形参变量传递的是数组元素的值,而用数组名作函数实参时,向形参(数组名或者指针变量)传递的是数组首元素的地址。 (1)输出10个数,要求输出其中值最大的元素和该数是第几个数。(数组...
  • C++用数组名作函数参数_微学苑 常量和变量可以用作函数实参,同样数组元素也可以作函数实参,其用法与变量相同。数组名也可以作实参和形参,传递的是数组的起始地址。 用数组元素作函数实参 由于实参可以是...
  • #include int row,col;float max(float array[][4],int n){ int i=0,j=0; float maxvalue=array[0][0]; for(i=0;i;i++) for(j=0;j;j++) if(maxvalue[i][j]) { maxvalue=arra
  • 数组名作函数参数

    2015-08-07 11:51:01
    而用数组名作函数参数时,如果改变了形参数组的元素的值将同时改变实参数组的值。在程序设计中往往有意识地利用这特点改变实参数组元素的值。 实际上,声明形参数组并不意味着真正建立个包含若干元素的数组,在...
  • 题目描述:用选择法对数组中10个整数按由小到大排序 代码如下:#include using namespace std; int main() { void select_sort(int arrary[],int n); //函数声明 int a[10],i; cout;
  • C++用数组元素作函数实参 C++中实参可以是表达式,而数组元素可以是表达式的组成部分,因此数组元素可以作为函数的实参,与用变量作实参一样,将数组元素的值传送给形参变量。 C++也可以用数组名作函数参数, 此时...
  • 一维数组作为函数形参

    千次阅读 2018-04-25 14:53:53
    个例子引发的思考   运行以下代码,请问输出是什么?例子来源于《剑指Offer》,我对书上例子做了修改,让其可以运行。 #include using namespace std; int GetSize(int data[]) { return sizeof(data); ...
  • 函数fun使用数组名作函数参数,可以在函数中通过形参数组间接引用实参数组的各个元素,如果修改形参数组元素的值,也就间接地修改了实参数组。 函数中另个参数delta,用于改变每次数组的值,从而引用不同的元素。...
  • 可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:  void Func(int array[3][10]);  void Func(int array[][10]);  二者都是合法...
  • 8.3通过指针引用数组8.3.1数组元素的指针个变量有地址,数组包含若干个元素,每个数组元素都在内存中占用储存单元,它们都有相对应的地址。指针变量可以指向变量,也可以指向数组元素。数组元素的指针就是数组...
  • 一维数组作为函数形参使用详解

    千次阅读 2012-04-04 21:14:19
    如何将一维数组作为函数形参来使用 请看下面的程序:  #include  void func1(int arr[])  {  printf("%d\n",sizeof(arr));  arr=arr+1;  printf("%d\n",*arr);
  • 1. 用数组元素作函数实参 1 #include <iostream> 2 using namespace std; 3 4 int max_value(int x, int max) 5 { 6 return max > x ? max : x; 7 } 8 9 int main() 10 { 11 co...
  • 函数实现数组的增删改查 /* Note:Your choice is C IDE / #include “stdio.h” int research1(int a[],int x,int num); int insert(int a[],int index,int x,int num); int size=0;//全局变量,表示当前数组元素...
  • #include<stdio.h> void sort(int x[], int n); int main() { int arr[10] = { 11,3,7,23,15,79,66,58,69,45 }, i; sort(arr, 10); printf("排序结果如下:\n"); for (i = 0; i <......
  • #include<stdio.h> void sort(int x[],int n); int main() { int arr[10] = { 11,3,7,23,15,79,66,58,69,45 },i; sort(arr, 10); printf("排序结果如下:\n"); for (i = 0; i <... ...
  • 方法一,形参给出第二维的长度。 #include <stdio.h> void func(int n,char str[][5]) { int i; for(i = 0;...//一维数组个数是否指定没关系,够用就行 func(3, str); return 0; } 用二维数组名作...
  • 今天在工作中遇到个很小的的bug,由此引发了我对数组名作为函数实参的思考。 首先,看一下这段代码。 // Array_Bound.cpp : Defines the entry point for the console application. // #include ...
  • 前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数。在写程序的时候,遇到一些问题,即二维数组函数的参数应该如何正确表示。我写程序的错误如下程序所示: 1 #include <cstdio>...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 792
精华内容 316
关键字:

一维数组名作函数实参