c语言二维数组指针的应用的一个例子

 c语言指针的应用

#include <stdio.h>
//首先要明白数组的一些特性
//1.函数传递数组形参,只传输数组的指针,也就是指向数组元素的指针
//2.第二个参数类型就是一个二维数组,元素类型也就是int [7],所以指针也就是int (*)[7]
//3.传递的时候给一个二维数组的名字即可,数组的名字可以被当成是指向第一个元素的指针
void search(int *,int *,int array[24][7],int key);
//函数print_row_i的第一个参数也就是 int(*)[7],一会传递二维数组迭代
void print_row_i(int (*a)[7],int row);

int main()
{
int week,day,key;
//定义一个二维数组
int a[][7] = {
          {1,32,3,4,1,2,45},
	  {12,41,32,3,5,2,35},
	  {12,3,5,4,1,2,4},
	  {4,2,4,1,3,45,4},
	  {14,21,41,2,4,3,2},
	  {12,4,5,1,1,41,23},
	  {23,42,34,5,2,31,4}
           };
search(&week,&day,a,32);
print_row_i(a,3);
	return 0;
}

void search(int * week,int *day,int array[24][7],int key)
{
int i,*ptr,week_,day_;
int index = 0;
  for(ptr = &array[0][0]; ptr != &array[0][0] + 7*24 ; ++ptr)
    { index ++;
      if(*ptr == key)
      {
         *week = index / 7 + 1; 
     	 *day  = index % 7;   
          printf("week %d,day %d\n",*week,*day); 
      }
    }

}
void print_row_i(int (*a)[7],int row)
{
int (*p)[7];
p = a + row;
int *ptr;
//dereference from array can get a element type
//p是一个指向二维数组的元素类型的一直指针(每个元素都是int [7]),对p解引用就得到了一个
//二维数组的元素类型 int [7],也就是解引用得到了一个1维数组,也就是指向元素的类型的指针

for(ptr = (*p);ptr != (*p) + 7;++ptr)
	printf("%d ",*ptr);
}

总结:

1.数组形参传递的是数组的指针,也就是指向数组元素的指针

比如数组是  int array[],那么元素类型是int,所以传递实参类型是int *,数组名即可

2.数组名字是一个指向它的第一个元素的指针,例如 

int array[],则 array 的类型是int *

int array[m][n],每个元素类型是 int [n],所以array的类型是 int(*)[n]

3.对 int (*)[n]类型解引用会得到, int [n]类型,也即是指向int [n]的每个元素的指针

例如   int(*p)[n];   p = array; int *ptr = *p ;    //这里对p解引用会得到一个一维数组,也是指向一维数组的元素的指针,当然是int *类型的了。

以上是自己根据多维数组自己总结的结论。我自己也不知道对不对,反正实际编程序的时候按照这些结论写是没问题的。希望大家批评指正

猜你喜欢

转载自blog.csdn.net/digitalkee/article/details/112062446