优雅随风
2015-06-12 09:59
采纳率: 66.7%
浏览 2.1k
已采纳

对结构体中的二维数组赋值为何会影响下一排

#include "stdio.h"
struct qipan
{
char point[20][80];
bool isClear;
};
qipan board;
int main()
{
for(int i=0;i<=19;i++)
for(int j=0;j<=79;j++)
board.point[i][j]=' ';
board.point[1][1] = board.point[1][2]=board.point[1][3]='*';
//board.point[1][2] = '*';
}

代码如上,在不要for循环的时候可以将其正确初始化,但是加入了for循环对每一个都先赋空值的时候,再执行,会在point[0]中出现3个*在point[1]中也会有三个*
求教,为什么会出现这种情况?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 纵横车 2015-06-12 10:08
    已采纳

    point[0]中出现3个‘*’是什么意思,point不是个2维数组吗?point[0]算什么?而且point是char型数组,怎么会在一个元素里有3个字符?

    点赞 打赏 评论
  • 优雅随风 2015-06-12 10:14

    图片说明 就是会出现这种情况

    点赞 打赏 评论
  • 知常曰明 2015-06-12 12:20

    看了@纵横车的解释,很到位。
    补充一点,对于C/C++这样的"中级预言"来说,变成语言并没有@优雅随风 你想像的那样智能.也就是说,对一个数组(指针)系统并不知道它开了多少的内存,只知道其实位置在哪里.怎么避免使用到你没有申请的内存,是程序员的工作.这点和C#,Java之类是不一样的.
    例如,在本例中,并不是你想的point[0]只有分配了80个字节.其实,字节一直在那里,你可以一直用下去,但是,用到不是本变量的值,就会影响别的变量(如本例);用到未分配的内存,就会引起段错误.

    点赞 打赏 评论

相关推荐 更多相似问题