高手们请帮我看一下这个程序错在哪里 啊?

王朝干货·作者佚名  2011-12-23
窄屏简体版  字體: |||超大  

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维指针

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航