• 普通变量和数组作为函数参数的区别


         1.在普通变量作为函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋给形参变量。

       2.在用数组名作为函数参数时,不是进行值得传递,即不是把是参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参分配内存。那么数据的传递究竟如何实现?我们都知道,数组名就是数组的首地址。因此在数组名作为函数参数时所进行的传递只是地址的传递,也就是说把是参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就是等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。也就是数组名作为函数参数时,不是值得单向传递,而是把是参数组的首地址传递给形参数组,这两个数组共用一段储存单元。

       3.C编译系统对形参数组的大小不做检查,所以形参数组可以不指定大小。

    函数形式如:void print(int a[]).或者void print(int a[].int lenth)其中lenth表示数组大小。

       4.多维数组也可以作为函数的参数。在函数定义的时候可以指定一维的长度,也可以省去第一维的长度如:int max(int a[][10])或者 int max(int a[3][10])

    //函数实现数组转置
    #include <stdio.h>
    
    int main()
    {
        int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
        int i,j,b[4][3];
        void turn(int arrya[][4],int arryb[][3]);
        turn(a,b);
        printf("array b:
    ");
        for(i = 0;i < 4;++ i)
        {
            for(j = 0 ;j < 3; ++ j)
            {
                printf("%5d",b[i][j]);
            }
            printf("
    ");
        }
        return 0;
    }
    
    void turn(int arrya[][4],int arryb[][3])
    {
        int r,c;
        for(r = 0; r < 3;++ r)
        {
            for(c = 0;c < 4;++ c)
            {
                arryb[c][r] = arrya[r][c];
            }
        }
    }
    View Code

    对二维数组来说,在函数定义时可以省略第一维的长度,但是不能把第二维的大小说明也省略了。

    因为二维数组在内存中存放的时候不会自动区分行和列。但可以不说明行数,因为数组在内存中是按行进行存放的。

  • 相关阅读:
    内存映射mmap的几个api及其使用
    hiredis的安装
    Linux 下解压大全
    redis内存数据库C客户端hiredis API 中文说明
    C/C++使用MySQL
    搜索引擎的缓存(cache)机制
    快速排序(QuickSort)
    冒泡排序
    spring核心之AOP学习总结一
    Spring学习总结六——SpringMVC一
  • 原文地址:https://www.cnblogs.com/jiaoluo/p/3558103.html
Copyright © 2020-2023  润新知