怎样返回二维数组的指针
在我编程过程中,有时候需要返回一个二维数组的指针,当然一维数组相信大家都会吧,不过,在此得说明一个名词:栈内存。
栈内存一般主要是应用保存局部变量的,一个函数内部的局部变量(不是动太分配的内存),当从函数返回时,局部变量所占的内存同时也被自动回收,这就是栈内存的一个特性,所以,如果需要从函数返回一个变量的地址,那么只能动态的分配内存。
对于一维数组的问题,不是本文章所讨论的问题,我来所讨论的是怎样返回一个二维数组的地址,在此,首先假设你对指针已经有一定的了解,要不,你会很难看懂下面的问题。指针真是一个好东西,C之真谛我认为也就是指针的所在,同时,C看似很容易入门,其实,入门不那么简单,学习C语言,如果不懂得如何应用指针,那么等于没有学习,如果C中如果没有指针的话,我不敢想像它会变成什么样子,当然,这只是个人的认为,不是大家都认可的。
在学习指针的时候,有一种指针叫做指向数组的指针,应用起来有点像应用二维数组,感觉与二维数组差不多,但是,指针不能与数组混为一谈,在很多C相关的资料上都把指针与数组混在一起,没有明显的区别开来,这对学习者来说是一个很大的误区,让他们认为指针与数组是等价的,如果你手里有这样的一书,说指针就是数组,或者说指针与数组是等价的,那么,请你不要再用这本书,用它将会给你学习指针------C之真谛带来误导,如果把指针与数组给搞混了,那么你还还真没有学好C。
好了,到本文最后也许你就知道指针与数组不能应等价或者就是这两个词来说的。首先我们都明白,一个函数不能返回一个数组,不管是一维的还是二维,但是能返回指针,这一点也可以说明指针与数组的区别吧。这样就好办事了,那么我们可以返回一个这样的指针,该指针指向一个数组,也就指向数组的指针。那么怎么声明函数的原形呢,首我们确定它是一个函数,该函数返回一个指针,该指针指向一个数组,也就是一个返回指向数组指针的函数。好吧,这样一组合起来就可以得到一函数声明如下:
unsigned long (*_my_function(void))[2];
关于些函数的用途我会在后面一一分析。同时,关于声明的优先级规则的问题,请自行参考《C专家编程》这本书,这本书还是不错的,不过得有一定的基础才行。那么我们先把整个例子的源代码先给大家看看,再接着分析源码,这样也许会更好一些,关于本话题目的一个完整的例子源码如下:
#ifndef _TEST_C_
#define _TEST_C_
#include <stdio.h>
#include <stdlib.h>
int _my_add(int,int);
int _my_sub(int,int);
int _my_mul(int,int);