gpt4 book ai didi

c - 二维数组的三重指针的目的是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:28 49 4
gpt4 key购买 nike

                 // Triple Pointer Version       
void init(char ***subjects_array, char***courses_array)
{


int i;

*subjects_array = (char**) malloc (100 * sizeof(char*));
*courses_array = (char**) malloc(100 * sizeof(char*));


for(i = 0; i < INITIAL_COURSE_SIZE; i++)
{
(*subjects)[i] = (char*) malloc(4 * sizeof(char));
(*courses)[i] = (char*) malloc(6 * sizeof(char));
}


} // end of Triple pointer version


// Double Pointer Version
void init(char** subject_array, char** courses_array) {

subject_array = (char **) malloc (100*sizeof(char*));
courses_array = (char **) malloc (100*sizeof(char*));

for(int i = 0; i<100; i++){
subject_array[i] = (char*) malloc(4*sizeof(char));
courses_array[i] = (char*) malloc (6*sizeof(char));
}
}

我的问题是:两个版本都启动一个二维数组。那么三指针版本有什么用呢?额外的间接级别似乎没有任何“目的”。

最佳答案

由于 C 仅按值传递参数(包括指针),因此您需要为希望在函数内修改的任何参数添加额外的间接级别(即星号)。

这为正在发生的事情提供了线索:通常,二维数组需要两个星号,即 char **twoD。但是,由于 init 分配了一个新数组,因此您需要一个额外的间接级别,即

void init(char ***subjects_array, char***courses_array)

并且还将指针从调用者传递到您的二维数组:

char **subj, **courses;
init(&subj, &courses);

这也是参数在 init 中被取消引用的原因:

*subjects_array = (char**) malloc (100 * sizeof(char**));
// ^
// |
// An asterisk was missing here --------------+

subjects_array 前面的星号告诉编译器通过指针进行赋值,修改调用者传递给 init 的变量。

关于c - 二维数组的三重指针的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32289187/

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