功能声明是
void function (char *);
如果p是一个char指针,那么这两个函数调用之间有什么区别。
function (p)
和
function ((char **) &p)
它们是否相同。
我会感谢堆栈溢出系列有关此主题的任何信息。
答案 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编译器编译。