精华内容
下载资源
问答
  • 1、把数组的内存首地址和数组的有效长度传入函数。2、实参数组和函数参数数组的数据类型不一样。形参中的数组,编译器会它当做一个指针处理,这是C语音的特色3、形参写在函数形参位置和写在函数内是一样的、二、...

    一、数组做函数参数退化问题

    数组做函数参数时,会退化为指针。

    1、把数组的内存首地址和数组的有效长度传入函数。

    2、实参数组和函数参数数组的数据类型不一样。形参中的数组,编译器会把它当做一个指针处理,这是C语音的特色

    3、形参写在函数形参位置和写在函数内是一样的、

    二、实验代码(排序)

    #include

    int sort(int a[], int num)

    {

    int tmp,i,j;

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

    {

    for (j=i+1;j

    {

    if (a[i] > a[j])

    {

    tmp = a[i];

    a[i] = a[j];

    a[j] = tmp;

    }

    }

    }

    return 0;

    }

    int display(int a[], int num)

    {

    int i;

    for (i=0;i

    {

    printf("%d ",a[i]);

    }

    printf("\n");

    return 0;

    }

    int main()

    {

    int a[7] = {12,1,3,34,27,13,97};

    int num;

    num = sizeof(a) / sizeof(a[0]);

    display(a,num);

    sort(a,num);

    display(a, num);

    system("pause");

    return 0;

    }

    这里函数参数传入的a只是main函数数组a的首地址,必须再传入数组的有效长度,才能正常使用。

    展开全文
  • C语言数组作为函数参数的问题

    千次阅读 2015-07-02 00:04:58
    C语言数组作为函数参数运行的时候, 函数在执行的过程中,数组参数是否像其他类型的参数(例如:int类型)不发生改变的执行呢? 我们首先看一个示例,然后观看他的打印结果,然后分析原因二,代码示例和运行结果/* C语言中...

    一:综述
    C语言中数组作为函数参数运行的时候, 函数在执行的过程中,数组参数是否像其他类型的参数(例如:int类型)不发生改变的执行呢?
    我们首先看一个示例,然后观看他的打印结果,然后分析原因

    二,代码示例和运行结果

    /*
    C语言中 数组作为函数参数退化为指针
    我们以打印数组的为例, 数组作为打印函数的参数
    */
    
    #include "stdafx.h"
    #include<stdio.h>
    
    /*
        数组打印函数大小默认100
    */
    void printarray_1(int arr[100]){
        printf("--------------void printarray_1(int arr[100])---------------\n");
    
        //PS:我们再次打印一下得到的数组长度是多少?
        int len = sizeof(arr)/sizeof(int);
        printf("len = %d\n", len);
    
        for(int i=0; i<len;i++){
            printf("arr[%d] = %d\n",i,arr[i]);
        }
    
    }
    
    /*
        数组打印函数传入数组参数,但是不限定大小
    */
    void printarray_2(int arr[]){
        printf("--------------void printarray_2(int arr[])---------------\n");
        int len = sizeof(arr)/sizeof(int);
        printf("len = %d\n", len);
    
        for(int i=0; i<len;i++){
            printf("arr[%d] = %d\n",i,arr[i]);
        }
    }
    
    /*
        数组打印函数传入数组参数,并且在传入一个int类型的长度参数
    */
    void printarray_3(int arr[] ,int len){
        printf("--------------void printarray_3(int arr[] ,int len)---------------\n");
        for(int i=0; i<len;i++){
            printf("arr[%d] = %d\n",i,arr[i]);
        }
    }
    
    /*
        数组打印函数传入指针参数,并且在传入数组长度参数
    */
    void printarray_4(int *p ,int len){
        printf("--------------void printarray_4(int *p ,int len)---------------\n");
        for(int i=0; i<len;i++){
            printf("arr[%d] = %d\n",i,*(p+i));
        }
    }
    
    int main(){
        int arr[5] = {1,2,3,4,5};
        printarray_1(arr);
        printarray_2(arr);
        printarray_3(arr,5);
        printarray_4(arr,5);
        return 0;
    }
    

    运行结果如下:

    --------------void printarray_1(int arr[100])---------------
    len = 1
    arr[0] = 1
    --------------void printarray_2(int arr[])---------------
    len = 1
    arr[0] = 1
    --------------void printarray_3(int arr[] ,int len)---------------
    arr[0] = 1
    arr[1] = 2
    arr[2] = 3
    arr[3] = 4
    arr[4] = 5
    --------------void printarray_4(int *p ,int len)---------------
    arr[0] = 1
    arr[1] = 2
    arr[2] = 3
    arr[3] = 4
    arr[4] = 5
    请按任意键继续. . .
    
    

    三,原因
    我们通过打印结果可以发现.
    问题1,函数void printarray_1(int arr[100])和void printarray_2(int arr[])通过int len = sizeof(arr)/sizeof(int);语句求得数组长度是1,与我们编写代码时认为的5不一致.

    问题2,函数void printarray_3(int arr[] ,int len)和函数void printarray_4(int *p ,int len)得到了我们期望的结果

    我们从上面可知,当数组作为函数的参数进行传递的时候,编译器根本就没有认为他是一个数组, 如果编译器认为他是一个数组的话,那么前两个函数的打印结果不可能是1, 应该是5. 所以我们可知当数组作为函数的参数的时候, 数组退化为了一个指针. 那么我们 可以解释问题1中前两个函数求得数组长度为1的问题了, sizeof(arr)是一个指针变量的长度 ,是4, sizeof(int)结果是4,故结果是1

    那么我们有一个疑问,如果数组作为函数的参数将退化为一个指针的话, 那么第三个函数void printarray_3(int arr[] ,int len)参数中也有arr[] 并且得到了正确的结果,并且代码中也出现了arr[i]通过索引来访问数组元素的操作. 这是在c开发中, 为了减少我们的编程难度和初学者的成本, 编译器兼容了这种写法 ,实际的arr[i]通过索引访问数组元素是 *(arr+i)的操作. 编译器这样人性化的对我们这么好, 但是也无形中给了我们一个误解就是数组可以做函数的参数

    四,结论
    通过以上的代码示例和代码分析我们可知:
    1,在C语言中,数组作为函数的参数,将会退化一个指针
    2,在C语言中,数组作为函数的参数,并且在函数内通过索引访问数组元素,编译器对我们编程习惯的额兼容,实际他的内部是通过*(arr+i)访问的
    3,在C语言中,数组作为函数的参数, 编译器在编译的时候, 不检查数组参数的大小,仅仅把他当做了一个指针
    4,在C语言中,数组作为函数的参数,规范的写法是 指针+数组长度

    展开全文
  • C语言数组作为函数参数举例

    千次阅读 2018-05-11 17:19:17
    替换指定数组中的最大元素。要求指定整数为数组arr2中的第一个元素arr2[0]。使运行结果为:#include &lt;stdio.h&gt;void replaceMax(int arr[],int value){ int max = arr[0]; int index = 0; int i; ...

    替换指定数组中的最大元素。要求指定整数为数组arr2中的第一个元素arr2[0]。

    使运行结果为:

    #include <stdio.h>
    void replaceMax(int arr[],int value)
    {
        int max = arr[0];
        int index = 0;
        int i;
        for(i=1;i<5;i++)
        {
            if(arr[i]>max)
            {
                max=arr[i];    //将数组中较大的数赋值给max
                index = i;     //记录当前索引
            }                
        }  
        arr[index] = value;
    }
    int main()
    {
        int arr1[] = {10,41,3,12,22};
        int arr2[] = {1,2,3,4,5};
        int i;
        replaceMax(arr1 ,arr2[0] );    //将数组arr1和数组arr2的第一个元素传入函数中
        for(i=0;i<5;i++)
        {
            printf("%d ",arr1[i]);                
        }
        return 0;    
    }
    展开全文
  • #includevoidreplaceMax(intarr[],intvalue){intmax=arr[0];intindex=0;inti;for(i=1;i<5;i++){if(arr[i]>...//将数组中较大的数赋值给maxindex=i;//记录当前索引}}arr[index]=value;}intmai...

    #include 

    void replaceMax(int arr[],int value)

    {

    int max = arr[0];

    int index = 0;

    int i;

    for(i=1;i<5;i++)

    {

    if(arr[i]>max)

    {

    max = arr[i]; //将数组中较大的数赋值给max

    index = i;  //记录当前索引

    }

    }

    arr[index] = value;

    }

    int main()

    {

    int arr1[] = {10,41,3,12,22};

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

    int i;

    replaceMax(arr1, arr2[0]); //将数组arr1和数组arr2的第一个元素传入函数中

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

    {

    printf("%d ",arr1[i]);

    }

    return 0;

    }

    求助为什么第23行代码  将数组arr1和数组arr2的第一个元素传入函数中 时,不需要在arr1后加[0]呢   replaceMax(arr1, arr2[0]); //将数组arr1和数组arr2的第一个元素传入函数中

    谢谢前辈们,六一快乐哒~(虽说不是六一了(●'◡'●))

    展开全文
  • 数组参数属于指针参数,指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.如果把数组当作参数, 不管愿意与否, 它就是指针, 指向第一个值的指针.1. 数组参数就是指向第一个元素的...
  • 数组的大小计算: int a[3]; //一个整型数占用空间4个字节,3个占用空间12个字节 char b[3]; //一个char型占用空间1个字节,三个占用空间3个字节 printf("a数组的大小是:%d\n",sizeof(a)); printf("b数组的大小...
  • c语言将二维数组当做一维数组传入函数,并能输出原二维数组的各元素,怎样理解?
  • 1.不多说上代码 #include typedef enum { female,male }Sextype;...(我想学到结构体这个地方了,指针应该比较熟悉了吧,如果不理解为什么首地址加上长度可以表示数组的原因,可以搜索数组传入函数这个问题)
  • 今天在写作业的时候,发现sizeof对于数组的使用,在传入函数前后是不一样的。...我们在把数组传入函数之前使用sizeof是正常的,用sizeof(a)/sizeof(a[0])得到 数组的长度 但是当我们传入一个函数之...
  • 因为C语言发明的初衷是替换汇编语言,要知道你用不同指令集的机器就要用不同的汇编语言。。。(此处省略800字议论文)我们想一想,当我们声明定义一个数组时,定义了数组的哪些int array[10] = {0};从上面的代码中我们...
  • 中文名C语言动态数组释义相对于静态数组而言根据随程序需要而重新指定大小定义声明时没有确定数组大小的数组C语言动态数组词目释义编辑动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中...
  • C语言数组22. 初始化2.1 整体初始化2.2 部分初始化2.3 大小2.4 赋值3. 数组与指针4. 函数数组4.1 传递数组函数4.2 从函数返回数组 2. 初始化 2.1 整体初始化 对比下面三段代码,分析输出。 代码一 ...
  • } 扩展资料: 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的...
  • 指针数组的一个重要作用就是作为main函数的参数。一般情况下main函数都是为空。 int main()或者int main(void) 但其实main函数是有参数的 int main(int argc,int *argv[]) 这里main函数里面arg...
  • 先来看一个例子: ...int main(int argc,char *argv){ /*定义一个长度为10的char数组*/ char a[10]; /*计算该数组长度*/ int len=sizeof(a)/sizeof(char); printf("数组a的长度为:%d",len); return 1;} 输出结...
  • 很久一段时间没有纯粹的编程了,今天偶尔换换脑子,想到以前很棘手的问题,如何在c语言中将多维数组当做参数传入函数,抛砖引玉,想到一个办法   使用typedef是一个很不错的办法 ...
  • C++ 中将二维数组传入函数

    千次阅读 2014-04-17 15:50:22
    C++ 中将二维数组传入函数 主要有三种方式 void fun(int *a[],int m,int n)//**a void fun2(int a[][2],int m)//a[2][2] void fun3(int (*a)[2],int m,int n)//a[2][2];int (*p)[2];p=a; //c语言中经常需要...
  • 我有一个char *s[6], 如果我写char**s是可以的,char *s[]也是可以的,char *s不行 但是我写void *s就不会报错是为什么呢
  • 1.整个数组当作函数参数,即把数组名称传入函数中,例如: #include<stdio.h> void temp(int arr[]) { int i; for(i=0; i<5; i++) { printf("%d\n", arr[i]); } } int main() { .
  • c语言中有时需要数组作为函数的参数进行传参,那么应该怎样传递呢? 先看一下整数作为函数参数时的传参 #include <stdio.h> #include <stdlib.h> int Add(int a,int b) { int c; c = a + b; ...
  • C语言二维数组作为函数参数传递

    万次阅读 多人点赞 2018-06-07 21:43:37
    二维数组作为函数的参数,实参可以直接使用二维数组名,在被调用函数中可以定义形参所有维数的大小,也可以省略以为大小的说明。例如: void find(char a[3][10]); void find (char a[ ][10]); 也可以使用数组...
  • C语言数组名作为参数进行函数传递在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是实参变量的值赋予形参变量。在用数组名作函数参数时...
  • 请你看程序运行结果,如果数组作为形式参数传入子函数,那么形式参数的值并不会影响原来main函数中的值,但是实际上,main函数中数组原来的值已经被修改了,这是因为数组传入的是地址(指针),我的问题就在这里,...
  • 因为数组作为形参传入函数后会退化成指针,对一个地址来取大小呢,如果是32位系统的话即为4,如果是64位系统的话为8,所以呢,在函数中sizeof获取的是指针的长度而不是数组的长度。第二呢,在函数中,sizeof的处理...
  • C语言数组函数参数

    2018-02-04 16:26:51
    数组在作为函数形参的时候,传入的是一个地址值,而不是一个整个的数组,void exp(int a[])=void exp(*a).
  • C语言数组作为参数传递

    万次阅读 2018-11-24 14:06:24
    1、整个数组当作函数参数,即把数组名称传入函数中,例如:   2、数组中的元素当作函数参数,即把数组中的参数传入函数中,例如: 数组作为函数参数时注意以下事项: 1、数组名作为函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,281
精华内容 14,912
关键字:

c语言把数组传入函数

c语言 订阅