我已经定义了一个自定义数据类型:
typedef CustomDatatype {
int id;
OtherCustomDatatype *p;
} CustomDatatype;
问题是我需要处理2D CustomDatatype**
矩阵,我需要正确访问矩阵的单元格并修改id字段。
CustomDatatype **assign_values_to_random_cells(CustomDatatype **matrix,
const int width, const int n, const int total)
{
int counter = 0;
int random_number;
int i;
int j;
int random_value;
while (counter < n)
{
random_number = (rand() % total);
i = random_number / width;
j = random_number - (width * i);
if (perform_a_check(matrix, i, j))
{
random_value = random_number%15;
(*matrix+(random_number))->id = random_value;
counter++;
}
fprintf(stderr, "Counter: %d ", counter);
fprintf(stderr, "Value: %d ", (*matrix+(random_number))->id);
fprintf(stderr, "Position %d (%d, %d)\n", random_number, i, j);
}
return matrix;
}
因此,此函数会返回比n
更少或更多的随机数,这正是我所期望的。 int **
矩阵的相同算法工作得很好,所以我想知道我是否以正确的方式访问矩阵单元格。
我试过了:
matrix[i][j].id = random_value
,除了我期待看到的n
之外,还会导致重复值; (*matrix+(cell_number))->id = random_value
,导致错误定位的值,绝对不是n
; (*(*matrix+(cell_number))).id = random_value
与上一项相同。更新#2:提供扩展输出
Matrix init:
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
Counter: 0
Position: 32 (2, 10) (Empty cell!) Value: 2
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- 2
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
Counter: 1
Position: 45 (4, 1) (Empty cell!) Value: 0
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- 2
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
Counter: 2
Position: 64 (5, 9) (Empty cell!) Value: 4
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- 2
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- 4 --
-- 4 -- -- -- -- -- -- -- -- --
Counter: 3
Position: 11 (1, 0) (Empty cell!) Value: 11
-- -- -- -- -- -- -- -- 11 -- --
11 -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- 2
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- 4 --
-- 4 -- -- -- -- -- -- -- -- --
Counter: 4
Position: 43 (3, 10) (Empty cell!) Value: 13
-- -- -- -- -- -- -- -- 11 -- --
11 -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- 2
-- -- -- -- -- -- -- -- -- -- 13
-- -- 13 -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- 4 --
-- 4 -- -- -- -- -- -- -- -- --
Counter: 5
Position: 24 (2, 2) (Empty cell!) Value: 9
-- -- -- -- -- -- -- -- 11 -- --
11 -- -- -- -- -- -- -- -- -- 9
-- -- 9 -- -- -- -- -- -- -- 2
-- -- -- -- -- -- -- -- -- -- 13
-- -- 13 -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- 4 --
-- 4 -- -- -- -- -- -- -- -- --
我做错了什么?