关于C语言迷宫问题:

只写到初始迷宫是就出问题啦,真不知道,哪错了啊,这么简单的代码,应该不会有问题啊,呵呵。麻烦大家帮我看看啊,非常感谢啦。
代码如下:
#include<stdio.h>
#include<string.h>
#define MAZESIZE 5
static char maze[MAZESIZE][MAZESIZE];
char *initmaze(){
char *p;
int i=0;
for(i=1;i<5;i++){
maze[i][0]='#';
}
for(i=0;i<5;i++){
maze[i][4]='#';
}
maze[0][1]='*';
maze[0][2]='#';
maze[0][3]='#';
maze[1][1]='*';
maze[1][2]='*';
maze[1][3]='*';
maze[2][3]='*';
maze[2][1]='#';
maze[2][2]='#';
maze[3][1]='*';
maze[3][2]='*';
maze[3][3]='*';
maze[4][1]='#';
maze[4][3]='#';
//set start and exit
maze[0][0]='!';
maze[4][2]='@';
p=&maze[0][0];
return p;
}
void showmaze(char *maze){
int i=0;
int j=0;
for(i=0;i<MAZESIZE;i++){
for(j=0;j<MAZESIZE;j++){
printf("%c",*(maze+i)+j);
}
printf("\n");
}
}
void main(){
char *maze;
maze=initmaze();
showmaze(maze);
getch();
}

第1个回答  2011-10-20
你的程序有点问题,char *initmaze(){}里输出和在void showmaze(char *maze){}的结果不一样。
for(i=0;i<MAZESIZE;i++){
for(j=0;j<MAZESIZE;j++){
// printf("%c",*(maze+i)+j);//这不正确,你这样并不是逐个输出数组的值
printf("%c",*(maze+i*MAZESIZE+j)); //改成这样就可以了
}
加上头文件 #include<conio.h>追问

能不能解释一下,这个为什么错了呢?非常感谢。
代码:
printf("%c",*(maze+i)+j);

追答

maze是个指针,指向的是个二维数组,i*MAAZESIZE相当于二维数组的第i行,这样写才能输出每一个元素*(maze+i)+j是第i个元素的元素值加上j,*的优先级要比+号高

追问

我查了一下书,另外有两种写法:
(1)*(maze[i]+j)
(2)*(*(maze+i)+j)
但我在这个程序里试了一下,这两种都不行,只有你那种能得出正确结果,想问一下,这是为什么?

追答

(1)和(2)是一样的,都是针对二维数组的,或者指针的指针用的,而你定义的maze是个指针,那么写语法上就错了。
多说一句吧,maze[i]已经代表一个字符了,maze[i]+j代表了字符maze[i]的值加j,你再解引用是什么意思?下面的一样

本回答被提问者采纳
第2个回答  2011-10-20

没问题的,可以执行

结果是

追问

是可以执行,但要的不是这个结果啊,我也不知道哪里出问题了。

追答

你要的是什么结果?题目都没有,没法解答。。。

追问

看一下我的代码,你就知道了,从代码推出的结果明显和程序运行的结果不一样,现在从程序显示的结果推断,原因出在显示处的“用指针遍历数组那里”输出的好像是一堆野指针。