• 再谈数组指针(做函数的参数和返回值)


    之前简单的说了一下数组指针,今天用的时候就出现了问题,主要是不知道怎样把一个一个数组指针当做参数还有函数返回值,今天好好查了一下,写了一个简单的程序,主要用来说明这两个问题。好了,直接看代码吧。

     1 int (*func(int (*a)[4]))[4]                //定义一个func函数,它的一个参数为数组指针,返回值类型也为数组指针
     2 /*  int(*)[4]为函数返回值的类型,func()为函数名,(int (*a)[4])为参数类型*/
     3 {
     4     int i;
     5     for(i=0;i<4;i++)
     6         {
     7             *(*(a+1)+i)=*(*a+i); //*(a+1)等同于a[1]的地址,*a等同与a[0]的地址,
     8         }
     9     return a;                    //返回的为数组名,也可以看做0行分数组的地址
    10 
    11 }
    12 int main()
    13 {
    14     int i,j;
    15     int (*p)[4];                //定义一个数组指针用来接收函数的返回值
    16     int a[2][4]={1,2,3,4,0,0,0,0};
    17     p=func(a);                    //调用func函数把数组第一行的值赋给第二行
    18     for(i=0;i<2;i++)
    19         
    20     {
    21         for(j=0;j<4;j++)
    22         {
    23             printf("%4d",*(*(p+i)+j));    //用数组指针来访问二维数组
    24         }
    25         printf("
    ");
    26     }
    27         return 0;
    28 }

    调用部分和返回部分都可以直接用二维数组名来表示,因为数组名也可以用来表示0行分数组的地址,而数组指针指向的就是二维数组的分数组。

    指针是c语言的精华,也是难点,这块一定要多看多练多理解,这样才能更好的使用指针。

  • 相关阅读:
    Algs4-1.3.44文本编辑器的缓冲区
    Algs4-1.3.42复制栈
    Algs4-1.3.41复制队列采用for方式实现
    Algs4-1.3.39环形缓冲区
    Algs4-1.3.40前移编码
    Algs4-1.3.38删除第k个元素-数组实现
    安全测试的一些漏洞和测试方法
    Java内存自动回收,为什么会有内存泄露?
    三款主流静态源代码安全检测工具比较
    Fortify源码安全检测工具
  • 原文地址:https://www.cnblogs.com/kingos/p/4523289.html
Copyright © 2020-2023  润新知