将指针传递给C中的函数

时间:2014-08-28 10:27:07

标签: c

功能声明是

void function (char *);

如果p是一个char指针,那么这两个函数调用之间有什么区别。

function (p)

function ((char **) &p)

它们是否相同。

我会感谢堆栈溢出系列有关此主题的任何信息。

3 个答案:

答案 0 :(得分:1)

void function ((char **) &p)如果我的记忆没有欺骗我,那么C语法无效。你可以获得最接近有效性的是删除内部()并编译为C ++然后它将是对char指针的指针的引用。

第一个只是一个“普通”字符指针。

答案 1 :(得分:1)

致电时:

function(p);

function的代码可以在p指向的位置读取char数组(即字符串)或单个char变量的内容或无论他们期望什么数据。

致电时:

function((char **) &p);

编译器会抱怨:

warning: incompatible pointer types passing 'char **' to parameter of
  type 'char *'

因为&p的类型为char **(事实上,显式转换(char **)是不必要的),即在函数声明中指向char的指针有char *即指向char的指针。 在运行时,function将不会像预期的那样读取字符串或单个字符,但会读取指向char的字节,就好像它们是一个字符串(可能导致崩溃)。 / p>

答案 2 :(得分:-1)

您的想法很好:运营商*&在分配值时相互取消,但在声明中没有取消,就像*/一样,但标题:

void function ((char **) &p);

无法由C编译器编译。