【发布时间】:2019-11-22 19:12:51
【问题描述】:
我正在尝试在 main 中分配一个字符串矩阵,并让其他函数访问和修改它,所有其他函数都可以看到修改。
这就是我分配矩阵的方式:
int i = 0;
char*** jobs = calloc(30, sizeof(char **));
for(int z = 0; z < 30; z++) {
jobs[z] = calloc(30, sizeof(char*));
for(int i = 0; i < 30; i++) {
jobs[z][i] = calloc(30, sizeof(char));
}
}
这就是我将矩阵传递给函数循环的方式:
loop(&i, &jobs);
*i 也需要 'i' 被他们全部修改和访问,但它似乎工作,所以不用担心。
这是我对函数循环的定义:
void loop(int *i, char**** jobs)
它还调用另一个函数执行,并将矩阵传递给它。 执行应该能够对其他函数可见的矩阵进行修改。
我正在尝试在“执行”中访问矩阵“作业”中的元素之一:
*jobs[*i][0] = "hello";
*i += 1;
*注意我也使用了我通过引用传递的“i”。
编辑: 我的问题:我是否按照我应该的方式传递矩阵? 例如,我需要在另一个名为 jobs 的函数中访问我在 exec 中添加的元素,该函数会打印这些元素,但它会打印“”(什么都没有)。
这是工作:
int sh_jobs(char**** jobs){
int i = 0;
while(jobs[i][0] != NULL) {
printf("[%d] %s %s %s\n", i, *jobs[i][0], *jobs[i][1]);
i++;
}
return 1;
}
它确实进入了 while 循环,这意味着值不是 NULL,但它不打印元素。
jobs调用执行:
sh_jobs(jobs);
【问题讨论】:
-
你实际上并没有问过问题。
-
@ScottHunter 我的更改仅保留在本地,其他功能看不到。我将对其进行编辑并添加我的问题。
-
如果您愿意
struct string_s { char *str; }; struct strings_s { struct string_s *strings; }; struct pragraph_s { struct strings_s *paragraphs; }; struct book_s { struct paragraph_s *paragraphs; },这对您和其他人来说会更容易。然后传递一个指向书的指针只是loop(... struct book_s *book),可以轻松访问book->paragraphs[1].strings[5]- 是一本书第一段中的5个字符串。 -
如果作业应该对所有其他函数可见并且您想要创建作业数组,只需将作业数组设为全局即可。
-
@KamilCuk 使用结构而不是字符串矩阵?还是作为字符串数组的一部分?请将此评论放在单独的答案中,使其更具可读性。