【发布时间】:2015-01-13 08:57:12
【问题描述】:
在参数传递过程中我无法弄清楚这个错误。
#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],'\0',50);
memset(mydata[1],'\0',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 my_char**和my_char**不兼容,你看。 -
这是一个合理的问题,不确定是否有否决票。它在C FAQ 中,但其他介绍性材料可能未涵盖该主题。
-
@SouravGhosh 我认为 const 没有太大区别。
-
你的直觉是对的,但编译器对待它们的方式不同
-
@darknight 不,直觉是错误的,编译器是对的。编译器几乎总是正确的。当它不正确时,一组训练有素的猴子通常会修复它。但你的直觉是只有你才能解决的。
标签: c casting double-pointer