当前位置: 代码迷 >> C语言 >> 二维数组初探
  详细解决方案

二维数组初探

热度:325   发布时间:2004-07-06 13:29:00.0
二维数组初探
/*有很多朋友在遇到二维数组时感到迷惑,现作一个简单的总结*/ /*下列每一种方法均为访问二维数组的方法*/ #include<stdio.h> #include<conio.h> #define M 3 #define N 3 int main(void) { int i,j; int a[M][N]={{1,2,3}, {4,5,6}, {7,8,9} }; int *p1=NULL; /*定义一级指针p1*/ int **p2=NULL; /*定义二级指针p2*/ int (*p3)[N]; /*声明数组指针p3*/ int *p4[M]; /*声明指针数组p4*/ p1=&a[0][0]; /*初始化一级指针p1*/ p3=a; /*初始化数组指针p3*/ /*check the address of pointers*/ printf("%p\n",&a); printf("%p\n",a[0]); printf("%p\n",a); printf("%p\n",*a); printf("%p\n",p2); printf("%p\n",a[1]); printf("%p\n",*(a+1)); printf("%p\n",(a+1)); printf("%p\n",&a[1][0]);

/*check the lenth of pointers*/ printf("%d\n",sizeof(a)); printf("%d\n",sizeof(p1)); printf("%d\n",sizeof(p2)); printf("%d\n",sizeof(p3)); printf("%d\n",sizeof(p4));

/*第一种方法*/ for(i=0;i<M*N;i++) { printf("%d ",*p1++); } printf("\n");

/*第二种方法*/ p2=(int **)a;

for(i=0;i<M*N;i++) { printf("%d ",p2[i]); } printf("\n");

/*第三种方法*/ p1=&a[0][0]; p2=&p1;

for(i=0;i<M*N;i++) { printf("%d ",**p2); *p2+=1; } printf("\n");

/*第四种方法*/ for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("%d ",p3[i][j]); } } printf("\n");

/*第五种方法*/ for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("%d ",(*p3)[j]); } p3++; } printf("\n");

/*第六种方法*/ for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("%d ",a[i][j]); } } printf("\n");

/*第七种方法*/ for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("%d ",*(*(a+i)+j)); } } printf("\n");

/*第八种方法*/

for(i=0;i<M;i++) { p4[i]=(int *)a[i]; } for(i=0;i<M;i++) { p3=(int (*)[])p4[i];

for(j=0;j<N;j++) { printf("%d ",(*p3)[j]); } }

getch(); return 0; }

搜索更多相关的解决方案: 初探  

----------------解决方案--------------------------------------------------------
动态二维数组的实现 1、不考虑函数参数传递的情形 #include<stdio.h> #include<conio.h> #include<malloc.h> #define M 2 #define N 3 int main(void) { int i,j; int (*p)[N]; int **pp; pp=(int **)malloc(M*sizeof(unsigned)); if(pp==NULL) { printf("No memory! press any key to exit!"); getch(); exit(1); } for(i=0;i<M;i++) { pp[i]=(int *)malloc(N*sizeof(int)); if(pp[i]==NULL) { printf("No memory! press any key to exit!"); getch(); exit(1); } } p=(int (*)[])pp[0]; for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("p[%d][%d]=",i,j); scanf("%d",&p[i][j]); printf("\n"); } } for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("p[%d][%d]=%d\n",i,j,p[i][j]); } } for(i=0;i<M;i++) { free(pp[i]); pp[i]=NULL; } free(pp); pp=NULL;

getch(); return 0; }

2、考虑函数参数传递的情形 #include <stdio.h> #include <conio.h> #include <malloc.h> #define M 3 #define N 3 int main(void) { int i,j; int (*p)[N]; int **pp=NULL; void my_malloc(int ***);

my_malloc(&pp); p=(int (*)[])pp;

for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("p[%d][%d]=",i,j); scanf("%d",(*(p+i)+j)); printf("\n"); } }

for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("p[%d][%d]=%d\n",i,j,*(*(p+i)+j)); } } for(i=0;i<M;i++) { free(pp[i]); pp[i]=NULL; } free(pp); pp=NULL;

getch(); return 0; }

void my_malloc(int ***p) { int k;

*p=(int **)malloc(M*sizeof(unsigned)); if(*p==NULL) { printf("No memory! press any to exit!); getch(); exit(1); }

for(k=0;k<M;k++) { *((*p)+k)=(int *)malloc(N*sizeof(int)); if((*p)[k]==NULL) { printf("No memory! press any to exit!); getch(); exit(1); } } }


----------------解决方案--------------------------------------------------------

哇什么年代的帖子,不过太好了,谢谢,顶回上去!


----------------解决方案--------------------------------------------------------

如果要是7维数组呢????


----------------解决方案--------------------------------------------------------
  相关解决方案