/*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维数组呢????
----------------解决方案--------------------------------------------------------