为什么我在C中的指针有错误?

时间:2014-03-06 06:54:30

标签: c

我开始学习C语言。

为什么我在&i的第8行出错?

这是来源:

char * func(char *d, char *str) 
{
    return d;
}

int main(int argc, char *argv[])
{
    char *i = NULL;
    func(&i, "aaa"); // line 8. here I have the error (in "&i")
}

4 个答案:

答案 0 :(得分:3)

您正在传递char**,该函数需要char*。你需要通过i而没有&的地址运算符,因为这样你就得到了指针的地址。

只需通过func(i, "aaa");

答案 1 :(得分:1)

&i的类型不是char * char * *

你应该经历这个 How do pointer to pointers work in C?

答案 2 :(得分:1)

当您编写&i时,您传递的内存地址为i,但由于i已经是char*,因此&i的类型为char**(指向char的指针)。因此,您有一个无关的&导致类型不匹配。只需删除&并将i传递给该函数,并取其地址:

func(i, aaa); //no need to use & on a variable that is already a pointer

答案 3 :(得分:0)

根据您的函数原型func(char *d, char *str),第一个参数接受char类型的指针,而char *i; i中是char类型的指针,因此将其直接传递给函数。 / p>

如果您想将&i传递给该功能,则需要pointer to pointer variable char **d