一道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++)
[解决办法]
[解决办法]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]这个元素。
[解决办法][解决办法]这个是典型的数组越界访问,你用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<&a[3][4]
相当于第四行,第五个数,你数组越界了
[解决办法]注意:不是多了两个随机值,而是四个;因为数组最后的最后一个应该是a[2][3],每次p增加一个整性的长度