谁能帮我判断这一题是否正确

来源:百度知道 编辑:UC知道 时间:2024/06/18 17:13:26
#include<stdio.h>
main()
{char b []="ABCDEFG"
char *chp=&b [7] ;
while(--chp>&b [0] )
putchar(*chp);
putchar('\n');
}

char *chp=&b [7] ;
数组越界
应取char *chp=&b [6] ;

从执行结果看,是没错的
但是从语法上看是错的
如1楼所说
char *chp=&b [7] ;
访问数组越界
而编译器是不会判断数组是否越界的
所以编译器不会报错

正常的写法是
#include<stdio.h>
main()
{char b []="ABCDEFG";
char *chp=&b [7] ;
while(chp>&b [0] )
{
putchar(*chp);
--chp;
}
putchar('\n');
}

Ps.
居然这么多人说数组不越界...
敢问char *chp=&b [7] ; 这里没有越界吗?
b[]中存在b[7]这个元素?
一定要程序报错了才算是越界?

错了
char b []="ABCDEFG"这句后面少了;
其它没看出什么问题,
数组没越界,sizeof(b) = 8;除了ABCDEFG后面还有个空字符
char *chp=&b [7] ;//这时chap指向空字符

错误:
1.main()返回类型
2.[]="ABCDEFG"后少了个;

正确的代码如下:
#include<stdio.h>
void main()
{char b []="ABCDEFG";
char *chp=&b [7] ;
while(--chp>&b [0] )
putchar(*chp);
putchar('\n');
}

运行结果为
GFEDCB