gpt4 book ai didi

C 拆分指针数组并保存在新变量中

转载 作者:行者123 更新时间:2023-11-30 14:50:25 26 4
gpt4 key购买 nike

我正忙于将二维指针数组的结果拆分并保存在另一个较小的二维指针数组中。但是,我无法让这个工作;仅第一行匹配。有人可以帮助我或告诉我我做错了什么吗?

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <time.h>
#include <sys/time.h>

void print_grid(bool *grid, int n, int m){
int i, j;
for (i = 0; i < n; i++){
for (j = 0; j < m; j++){
printf("%d ", (bool)*((grid+i*n) + j));
}
printf("\n");
}
}

void generate_random_values_grid(bool *grid, int n, int m){
int i, j;
for (i = 0; i<n; i++){
for (j = 0; j<m; j++){
int rndm = (rand() %2);
*((grid+i*n) + j) = rndm;
}
}
}

int main(int argc, char *argv[])
{
int n=7;
int m=5;
int num_procs = 3;
int division = 2;

bool *grid = (bool *)malloc(n*m*sizeof(bool));
srand(time(NULL));
generate_random_values_grid((bool *)grid, n, m);
print_grid((bool *)grid, n, m);

//Split
printf("----Split with division: %d ---------\n", division);
bool *division_grid = (bool *)malloc(division*m*sizeof(bool));
memcpy((bool *)division_grid, (bool *)grid, (division*m*sizeof(bool)));
print_grid((bool *)division_grid, division, m);

return 0;
}

最佳答案

双循环都是错误的:

for (i = 0; i<n; i++){    
for (j = 0; j<m; j++){
int rndm = (rand() %2);
*((grid+i*n) + j) = rndm;
}

从 2 个索引计算出的一维索引错误

除非m == n ,你乘以 i通过n ,所以当 i == n-1你得到的偏移量为 n*(n-1) 。所以问你这个问题:如果 m = 1 会怎样?和n = 10000

正确的公式是:

*((grid+i*m) + j) = rndm;     

一些更好的方法是:

  • 将行偏移量预先计算为行指针:bool *row = grid+i*m然后进入循环,用 row[j] 访问元素
  • 使用真实的、可变长度的数组而不是 malloc在主程序中(bool grid[n][m];nm 已确定之后)。

关于C 拆分指针数组并保存在新变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49000365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com