main()
{int a[2][3][4]={24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,j,m;
int *p,t,k;
int *p1;
p=a;
p1=*p;
for(i=0;i<23;i++)
{ k=*(p+i);
p=p+i;
for(p1=p+1;p1<p1+24;p1++)
if(*p1<k); k=*p1;
if(k!=*(p+i))
{ t=*p1;*p1=*(p+i);*(p+i)=t;}
}
printf("\n");
for(i=0;i<2;i++)
{ for(j=0;j<3;j++)
{for(m=0;m<4;m++)
printf("%d\t",a[i][j][m]);
printf("\n");}
printf("\n");}
}
为什么会出现以下的结果啊?
—— —— —— ——
—— —— —— ——
—— —— —— ——
—— —— —— ——
—— —— —— ——
—— —— —— ——
Null pointeorassignment!
以上程序做的是:
{三维数组排序:定义任意一个三维数组,编写程序,要求在输入数据(可以在初始化中给定任意的数据)后能够按照从小到大排序并输出结果。}
程序中错误很多,象语法错误什么的就不多说了,要命的是对指针的概念简直是一窍不通。下面是我重写的代码,注意一下指针的声明、地址的计算与引用。
void main()
{
int a[2][3][4]={24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,j,m;
int *p,*p1,t;
p=a[0][0]; //指向一个一维数组
for (i = 0; i < 23; i++) { //冒泡法排序
for (p1 = p + i + 1; p1 < p + 24; p1++) {
if (*(p + i) > *p1) {
t = *p1; *p1 = *(p + i); *(p + i) = t;
}
}
}
printf("\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(m=0;m<4;m++)
printf("%d\t",a[i][j][m]);
printf("\n");
}
printf("\n");
}
}
p1 要定义成 **p1
第8行改成*p1=p;
**p1是指向指针*p的指针,要用2维指针