首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一道C语言题,该怎么处理

2012-09-21 
一道C语言题#includestdio.hmain(){ int a[3][4]{{11,21,33,42},{15,22,32,13},{41,32,24,16}} int *p

一道C语言题
#include<stdio.h>

 main(){

int a[3][4]={{11,21,33,42},{15,22,32,13},{41,32,24,16}};
int *p;
for(p=&a[0][0];p<&a[3][4];p++)
printf("%3d",*p);
}
为何最后会有两个随机值?谢谢

[解决办法]
把 for(p=&a[0][0];p<&a[3][4];p++)
变成 for(p=&a[0][0];p<=&a[2][3];p++)

[解决办法]

探讨
#include<stdio.h>

main(){

int a[3][4]={{11,21,33,42},{15,22,32,13},{41,32,24,16}};
int *p;
for(p=&a[0][0];p<&a[3][4];p++)//把p<&a[3][4]改成p<&a[2][4]就可以了,因为数组的个数是用0开始的,到2结束
printf("%3d",*p);
}
为何最后会有两个随机值?谢谢

[解决办法]
P是一个地址。
[解决办法]
#include<stdio.h>

main(){

int a[3][4]={{11,21,33,42},{15,22,32,13},{41,32,24,16}};
int *p;
for(p=&a[0][0];p<&a[3][4];p++)
printf("%3d \n",*p);
}
加个\n或则是 把空隙变大点 (3 -> 6)
你仔细 看 不是2个随机值 ......
[解决办法]
是不是多做了一轮循环 &a[2][3]是最后元素的地址
[解决办法]
p<&a[3][4]

改成:

p<&a[2][4]
[解决办法]
int a[3][4];下标是从0开始的,a[2][3]是最后的一个元素,根本就没有a[3][4]这个元素。
[解决办法]
探讨
int a[3][4];下标是从0开始的,a[2][3]是最后的一个元素,根本就没有a[3][4]这个元素。

[解决办法]
这个是典型的数组越界访问,你用java写的话绝对报错
[解决办法]
数组边界搞错了,从0开始,要少1
[解决办法]
p<&a[3][4]

改成:

p<&a[2][3]

你数组定义为a[3][4],这样实际的数组由于是从a[0][0]开始的,所以结束的话,这个数值是少1的,因此最终结束的数组元素应为a[2][3]。
[解决办法]
&a[3][4];不是最后一个元素,最后一个元素是&a[2][3] 控制条件应该是p<&a[2][4]
[解决办法]
探讨

p<&amp;a[3][4]

改成:

p<&amp;a[2][3]

你数组定义为a[3][4],这样实际的数组由于是从a[0][0]开始的,所以结束的话,这个数值是少1的,因此最终结束的数组元素应为a[2][3]。

[解决办法]
p<&a[3][4]

相当于第四行,第五个数,你数组越界了
[解决办法]
注意:不是多了两个随机值,而是四个;因为数组最后的最后一个应该是a[2][3],每次p增加一个整性的长度

热点排行