对三重指针的作用极为困惑

时间:2015-08-29 04:37:59

标签: c arrays pointers

int main()
{
    char** subject_array;
    char** courses_array;    

    initialize(subject_array, courses_array);
}


void initialize(char*** subject_array, char*** courses_array)
{
    int i;

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

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

} //void initialize

我的问题是:为什么main中声明的双指针和初始化函数中的三指针之间存在差异?我认为三重指针允许我修改2d数组的位置。

我的作业提出了以下要求:

由于您将更改指针所指向的位置,因此将涉及主题和指针的三重指针 课程!

上面的代码处理了粗体要求,但我完全不知道这甚至意味着什么。 有人可以把它分解给我吗?这是否意味着我可以修改subject_array和courses_array的2d数组的内容?如交换? 但我已经可以用双指针制作一个二维数组了!为什么三重指针?

1 个答案:

答案 0 :(得分:2)

首先,代码是incorret,因为initialize要求char***&{39}和main给它char**&#39; s。要添加另一个&#34;指针级别&#34;,您可以获取您想要的任何地址。那么,main的最后一行应该是initialize(&subject_array, &courses_array)(或者是return 0?)

毕竟,如果您不需要自己修改变量subject_arraycourses_array ,而不是他们指向的,您可以删除这些指针。而你实际上通过*var = malloc(...)自行修改这些变量。而且,正如我已经指出的那样,唯一的问题是initialize 的参数是 char***, char***不是 char**, char**的{​​{ 1}}正在做。