二维数组查找

 1.int a; int*a; int **a; int (*a)[10]; int (*a) (int)的区别。

 a) int a 表示一个内存空间,这个空间用来存放一个整数。

 b) int *a指向一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间。

 c) int **a表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,并且指向的这个空间中的指针,指向一个整数。指向了一个b)中提到的空间。

d) int(*a)[10]表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个长度为10,类型为int的数组;与int **a的差别主要体现在a++上。

e) int (*a) (int)表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个函数,这个函数有一个int型的参数,并且函数的放回类型也是int。

 

2.当声明一个数组时,数组的名字也是一个指针。32位系统上,对任意指针求sizeof,得到的结果都是4. 当数组作为函数参数进行传递时,数组自动退化为同类型的指针。

 

3.例题:二维数组中的查找。

二维数组的每一行是按从左到右递增以及从上到下递增来排序的,判断数组中是否含有一个整数。

解决思想:找到最右边的列的第一个数,如果比要寻找的数大,则该列都不用再考虑,如果比要寻找的数小,则该行都不用再考虑。递归求解。

#include<iostream>
using namespace std;

int findnumber(const int* array,int number,int &nrows,int &ncols,const int rows,const int cols)     //int ** array并不能把整个数组传进去,因为不知道每一行有几个元素
{

    if(nrows==0||ncols==0)
        return 0;
    else if(*(array+(rows-nrows)*cols+ncols-1)==number)
        return 1;
    else if(*(array+(rows-nrows)*cols+ncols-1)>number)
    {
        ncols-=1;
        findnumber(array,number,nrows,ncols,rows,cols);
    }
    else if(*(array+(rows-nrows)*cols+ncols-1)<number)
    {
        nrows-=1;
        findnumber(array,number,nrows,ncols,rows,cols);
    }
}

int main()     //main()函数只能返回int,不能返回bool
{
    int array[4][4]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};  
    int rows=4;
    int cols=4;
    int nrows=rows;
    int ncols=cols;
    int number=7;
    cout<<findnumber(array[0],number,nrows,ncols,rows,cols);
}

 

posted @ 2015-06-08 16:30  wy1290939507  阅读(354)  评论(0编辑  收藏  举报