对二维数组的一些思考_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 对二维数组的一些思考

对二维数组的一些思考

 2010/12/23 8:03:25  加州板栗  http://huying5054219-163-com.javaeye.com  我要评论(0)
  • 摘要:首先,看下面一个简单的程序#include<stdio.h>#defineFORMAT"%d\n"intmain(intargc,char*argv[]){intstr[3][3]={{1,2,3},{4,5,6},{7,8,9}};printf(FORMAT,*(*(str)));return0;}输出结果:1解释:二维数组名str是指向行的,指向以为数组str[0],即0行首地址*str是指向列的,代表0行0列元素地址,等同于str[0]加*行指针变列指针加&
  • 标签:数组

首先,看下面一个简单的程序

#include <stdio.h> 
#define FORMAT "%d\n" 
int main(int argc, char *argv[]){ 
	int str[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 
	printf(FORMAT,*(*(str))); 
	return 0; 
}

?输出结果: 1

?解释:? 二维数组名 str 是指向的,指向以为数组str[0],即0行首地址

?????????? *str 是指向的,代表0行0列元素地址,等同于str[0]

??????????? 加* 指针变指针

??????????? 加& 指针变指针

?

接着,我们引入指针变量p

#include <stdio.h> 
#define FORMAT "%d\n" 
int main(int argc, char *argv[]){ 
	int str[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 
	int (*p)[3];
	p=str;
	printf(FORMAT,*(*(p))); 
	return 0; 
}

输出结果:和上面一样 还是1?

把二维数组的首地址(即0行地址? 行地址)赋给指针变量P

?

?好吧,我们要注意的问题要出现了

//程序1
#include <stdio.h>
#define FORMAT "%d\n" 
int main(int argc, char *argv[]){ 
 	int str[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 
 	int (*p)[3]; 
	p=str; 
 	printf(FORMAT,*(*p+4)); 
 	return 0; 
 }

?
//程序2
#include <stdio.h>
#define FORMAT "%d\n" 
int main(int argc, char *argv[]){ 
 	int str[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 
 	int (*p)[3]; 
	p=str; 
 	printf(FORMAT,*(*(p+1)+1)); 
 	return 0; 
 }
 ?
 //程序3
#include <stdio.h>
#define FORMAT "%d\n" 
int main(int argc, char *argv[]){ 
 	int str[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 
 	printf(FORMAT,str[1][1]); 
 	return 0; 
 }

?程序1、2、3运行的结果都是 5?

? 注意 :比较程序1、2的第8行程序,程序1是用的(序号为4的数字,序号从0开始)输出二维数组的数字,而程序2用的是(即第1行第1列,行列的序号都是从0开始,切记!!!)?;

???????????? 程序3是最直接的输出方法。

发表评论
用户名: 匿名