c语言中,我想设计一个指针函数,实参是一个二维数组,该怎么做啊

函数的形参是指针,实参是二维数组

#include <stdio.h>
int *_print(int (*_pointer)[2],int n);
void main(void)
{
    int demo[2][2]={{1,2},{3,4}};
int *p,row;
printf("请输入行号:");
    scanf("%d",&row);
p=_print(demo,row); // 实参是二维数组名
printf("%d\n",*(p+1)); // 输出row行1列的元素
}

/* 定义指针函数_print
   形参是指向由2个元素组成的一维数组的指针
   函数返回值是 地址
*/
int *_print(int (*_pointer)[2],int n)
{
    int *p;
p=*(_pointer+n); // p的值是实参二维数组&?[n][0]的地址
return p; // 返回地址
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-26

直接用指向数组的指针来实现,

写个例子,你可以参考下:

#include "stdio.h"
void transfer(int (*a)[4])//实现数组每个元素自增1
{
   int i,j;
   for(i=0;i<3;i++)
     for(j=0;j<4;j++)
     {
          a[i][j]++;
     }

}
int main()
{
   int a[3][4]={0},i,j;
   for(i=0;i<3;i++)
    for(j=0;j<4;j++)
      a[i][j]=1;
   transfer(a);
   for(i=0;i<3;i++)
   {
    for(j=0;j<4;j++)
    {
       printf("%d ",a[i][j]);
    }
   }   
}
输出全2

本回答被网友采纳
第2个回答  2013-11-26
指针函数就是返回值为指针的函数,函数指针就是指向函数的指针。
因为函数在运行过程中,会把实参复制一份到堆栈运行,其实还是相当于一个局部变量,函数结束后就会被释放掉,如果你返回它的指针,那么就会因为找到的不是你想要的地址而出错。
在C语言中,解决办法就是你把二维数组定义成全局变量,也不要给函数传什么实参,直接用就行。这样你返回它的指针就没有问题了。
第3个回答  2013-11-26
#include <stdio.h>

int main(void)
{
    int max(int *number);//函数声明
    int (*p)(int);    //定义指针函数
    int a[3][10];       //数组声明 
。。。。。。。。
。。。。。。。

    (*p)(a);
//调用指针函数  
 }

形参 
int max(int *number)
{
.........
............
...........
}