函数具有“int”类型的参数,但传递了一个“int*”类型的参数
Function has parameter of type `int`, but gets passed an argument of type `int*`
我对术语有疑问。考虑一个一元函数。我 read in this thread 该函数的参数是其声明中使用的 'variable' , 'argument' 是调用函数时传递给函数的变量的实际值。
然而,考虑这个简单的函数:
void f(int *p){};
它有一个 *p
类型的 int
参数。但是,调用函数时我可以做
v = 25;
int* w = &v;
f(w);
即,我将类型为 int*
的参数传递给函数,这意味着我传递的参数类型与参数类型不同。
我将函数视为一个映射 f:A->B,其域 A 决定参数和实参的类型,即它们应该相等。我的推理有什么问题?
*int
是语法错误,不是类型。 int *
是一种类型。
参数名称是p
,不是*p
。参数 p
的类型是 int *
。在您的示例代码中,您为 int *
类型的参数传递了 int *
类型的参数,这很好。
一般来说,参数类型可以不同于参数类型,前提是允许使用该参数初始化参数类型的变量。例如,您可以将 5
(int
)传递给参数类型为 long
或 float
的函数。
您的函数有一个类型为 int*
的参数 p
。您向它传递一个 int*
类型的参数 w
。 *
的位置在句法层面造成了一些尴尬,但出于类型检查的目的,您应该将其视为类型的一部分。
我对术语有疑问。考虑一个一元函数。我 read in this thread 该函数的参数是其声明中使用的 'variable' , 'argument' 是调用函数时传递给函数的变量的实际值。 然而,考虑这个简单的函数:
void f(int *p){};
它有一个 *p
类型的 int
参数。但是,调用函数时我可以做
v = 25;
int* w = &v;
f(w);
即,我将类型为 int*
的参数传递给函数,这意味着我传递的参数类型与参数类型不同。
我将函数视为一个映射 f:A->B,其域 A 决定参数和实参的类型,即它们应该相等。我的推理有什么问题?
*int
是语法错误,不是类型。 int *
是一种类型。
参数名称是p
,不是*p
。参数 p
的类型是 int *
。在您的示例代码中,您为 int *
类型的参数传递了 int *
类型的参数,这很好。
一般来说,参数类型可以不同于参数类型,前提是允许使用该参数初始化参数类型的变量。例如,您可以将 5
(int
)传递给参数类型为 long
或 float
的函数。
您的函数有一个类型为 int*
的参数 p
。您向它传递一个 int*
类型的参数 w
。 *
的位置在句法层面造成了一些尴尬,但出于类型检查的目的,您应该将其视为类型的一部分。