在 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);
我在传递参数时无法弄清楚这个错误。
#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);