在 C 中对双指针进行类型转换

Typecasting a double pointer in C

我在传递参数时无法弄清楚这个错误。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef char my_char;

void myfunc(const my_char** data)
{
    printf ("%s\n", *data);
    printf ("%s\n", *(data + 1));
}

int main(){

    char **mydata;
    mydata = malloc(sizeof(char*)*2);
    mydata[0] = malloc(sizeof(char)*50);
    mydata[1] = malloc(sizeof(char)*50);

    memset(mydata[0],'[=10=]',50);
    memset(mydata[1],'[=10=]',50);
    strcpy (mydata[0], "Hello");
    strcpy (mydata[1], "world");

    myfunc((my_char**)mydata);

    free (mydata[0]);
    free (mydata[1]);
    free (mydata);

    return 0;
}

它工作正常。但是当我明确地输入参数时会发出警告。为什么会这样? 显示的警告是:

warning: passing argument 1 of ‘myfunc’ from incompatible pointer type

据我所知,类型转换应该有助于编译器理解指针保存的数据类型。但是这里一点帮助都没有。

在对数据类型进行类型转换时使用 const

myfunc((const my_char**)mydata);

您正在函数中作为 const 获取该值。

删除 const,添加 const 会导致传递的参数类型与声明混淆,并像这样对数据元素进行类型转换:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef char my_char;

void myfunc(my_char** data)
{
    printf("%s\n", *data);
    printf("%s\n", *(data + 1));
}

int main(){

    char **mydata;
    mydata = (char **)malloc(sizeof(char*)* 2);
    mydata[0] = (char *)malloc(sizeof(char)* 50);
    mydata[1] = (char *)malloc(sizeof(char)* 50);

    memset(mydata[0], '[=10=]', 50);
    memset(mydata[1], '[=10=]', 50);
    strcpy(mydata[0], "Hello");
    strcpy(mydata[1], "world");

    myfunc((my_char**)mydata);

    free(mydata[0]);
    free(mydata[1]);
    free(mydata);

    return 0;
}

你要么从 void myfunc(const my_char** data) 中删除 const,即 void myfunc(my_char** data) 或者在类型转换时提供 const 即 myfunc((const my_char**)mydata);