| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 696 人关注过本帖
标题:二维数组初探
只看楼主 加入收藏
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
收藏
 问题点数:0 回复次数:3 
二维数组初探
/*有很多朋友在遇到二维数组时感到迷惑,现作一个简单的总结*/ /*下列每一种方法均为访问二维数组的方法*/ #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; }

搜索更多相关主题的帖子: 初探 
2004-07-06 13:29
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
收藏
得分: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); } } }

2004-07-06 13:32
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

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

2004-11-20 20:33
stnlcd
Rank: 1
等 级:新手上路
帖 子:177
专家分:1
注 册:2004-11-21
收藏
得分:0 

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


要让一个男人破产,请给他一架相机,要让一个男人倾家荡产,请给他一架望远镜。
2004-11-22 16:20
快速回复:二维数组初探
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017013 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved