我正在尝试将6x15数组(映射)中的随机坐标设置为数字3,但前提是该坐标的值仍为0。我要放置的值为3)
25 int shipnum;
26 int x;
27
28 shipnum = 1;
29 while(shipnum > 0)
30 {
31 if ((&x = map[rand_number(MAX_ROWS)][rand_number(MAX_COLS)]) == 0)
32 {*x = 3;
33 shipnum --;}
34 }
但是,在编译过程中,我得到了错误
testarray3.c:31:9: error: lvalue required as left operand of assignment
testarray3.c:32:2: error: invalid type argument of unary ‘*’ (have ‘int’)
我不确定这两个都在说什么...还是有更好的方法来做我想做的事情?
最佳答案
如果x
是一个int变量,则&x
是它的地址,并且您不能更改(第一个错误)。如果x
是一个整数,则*x
没有任何意义-整数不是指针(第二个错误)。
您需要的是:
使x
指向int(int *x;
)的指针
取map[rand][rand]
的地址并将其存储在x中
检查存储在该地址(*x
)的值
如果该值为0,则更新该值。
您的代码将真正受益于不尝试将代码全部填充为两行。实际上,我会避免整个int指针操作,因为它只会混淆您的代码。将随机坐标存储在两个变量中,并使用常规数组访问/分配。
关于c - 将数字放置在随机坐标的“开放”槽中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10448592/