c - 将数字放置在随机坐标的“开放”槽中

标签 c arrays random replace placement

我正在尝试将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/

相关文章:

arrays - 在向量前面添加零

mysql - 每次获取随机/不同的记录

python - Scikit-learn SVC 总是在随机数据交叉验证上给出准确度 0

c - 如何在 C 中使用 malloc 和 realloc 正确分配结构中的数组?

c - malloc 和 free 的实现

c++ - 为什么这个结构是用字段中已有的数据初始化的?

c - 使用 strcmp(char*,char*) 时出现关于 char* 的错误

c++ - 在函数指针赋值中强制转换

java - 代码中的数字问题

sql - 如何将随机值插入 SQL Server 表中?