Tij*_*ani 0 c prototype declaration function
我刚开始学习 C,我在给出的一个例子中遇到了这个,我知道这是一个函数原型,但我还没有理解的概念是这样一个事实
void function(char *);
Run Code Online (Sandbox Code Playgroud)
意味着当我最终声明该函数时,它将采用像这样的参数 char 指针参数
void function(char *arg){}
Run Code Online (Sandbox Code Playgroud)
?
只是为了回答你提出的问题:
什么是“无效致命(字符*);” 意思?
这是函数的原型/声明fatal。fatal是一个函数,它将一个指针char作为唯一的参数。
void 是函数的返回类型,在这种情况下,这意味着函数不会向其调用者返回值,或者如果返回,则返回值被调用者解释为无效。
函数的原型/声明对fatal()编译器很重要。通过这种方式,首先编译器将“知道”该函数稍后如何在以下程序中使用,但次要还会检查函数的定义、声明和使用之间是否存在任何不一致之处。
在 C 中,您可以char在函数声明中省略指向指针的特定标识符,但不能在定义中省略。这是 C 与 C++ 不同的情况;在 C++ 中,也允许在定义中省略标识符。您可以查看此答案中标准中的相应短语。
所以在fatalC的定义中,你必须为char指针提供一个标识符:
// Definition of function fatal().
void fatal(char *a)
{
printf("The string of (a) is: %s\n",a);
}
Run Code Online (Sandbox Code Playgroud)
但是你可以在声明中省略这个:
void fatal(char *);
Run Code Online (Sandbox Code Playgroud)
注意:调用函数时提供的参数之间的标识符和函数声明中指定的参数可能会有所不同,例如:
// Declaration (Protoype) of function fatal().
void fatal(char* a); // parameter a (pointer to char);
int main()
{
char b[] = "Hello"; // Declaration and Initialization of array b.
printf("Let´s use the function fatal to print what the string in b is
contained of!\n");
fatal(b); // when given as argument to a function, b
// is a pointer to the first element of the char
// array of b.
}
// Definition of function fatal().
void fatal(char* a)
{
printf("The string of (a) is: %s\n",a);
}
Run Code Online (Sandbox Code Playgroud)
在此处查看有关参数和参数之间区别的更多信息:参数和参数之间有什么区别?
从更远的角度来看,“按值传递”和“按引用传递”也有重要区别。指针参数/参数始终是按引用传递。这两个特别是什么以及它们之间的区别最好在这里解释:按引用传递与按值传递之间有什么区别?
在此上下文和范围可见性的上下文中,了解是否有x引用函数中对象的标识符也很重要,调用者可以使用fatal相同的标识符,x反之亦然,引用一个对象在每个范围内总计不同的对象。- 意味着,您可以为不同范围内的不同对象使用相同的标识符(名称),但每个标识符在其范围内只能使用一次。