函数定义(C)?
1个回答
2021-08-13 · 学动漫、设计、电竞、电商、短视频、软件等
关注
展开全部
函数定义同时描述了函数的参数列表和函数体(当函数被调用时所执行的语句),参数列表有两种可以接受的形式。K&RC风格用一个单独的列表说明参数的类型,它出现在函数体的左花括号之前。新式风格(现在提倡)则直接在参数列表中包含了参数的类型。如果函数体内没有任何语句,那么该函数就称为存根,它在测试不完整的程序时非常有用。函数声明给出了和-一-个函数有关的有限信息,当函数被调用时就会用到这些信息。函数声明也有两种可以接受的形式。K&R风格没有参数列表,它只是声明了函数返回值的类型。目前所提倡的新风格又称为函数原型,除了返回值类型之外,它还包含了参数类型的声明,这就允许编译器在调用函数时检查参数的数量和类型。也可以把参数名放在函数的原型中,尽管不是必需,但这样做可以使原型对于其他读者更为有用,因为它传递了更多的信息。对于没有参数的函数,它的原型在参数列表中有一个关键字void。常见的原型使用方法是把原型放在一个单独的文件中,当其他源文件需要这个原型时,就用#include 指令把这个文件包含进来。这个技巧可以使原型必需的拷贝份数降到最低,有助于提高程序的可维护性。
return语句用于指定从-一个函数返回的值。如果return语句没有包含返回值,或者函数不包含任何return 语句,那么函数就没有返回值。在许多其他语言中,这类函数被称为过程。在 ANSI C中,没有返回值的函数的返回类型应该声明为void。当一个函数被调用时,编译器如果无法看到它的任何声明,那么它就假定函数返回-一个整型值。对于那些返回值不是整型的函数,在调用之前对它们进行声明是非常重要的,这可以避免由于不可预测的类型转换而导致的错误。对于那些没有原型的函数,传递给函数的实参将进行缺省参数提升:char和 short类型的实参被转换为int类型,float类型的实参被转换为double类型。函数的参数是通过传值方式进行传递的,它实际所传递的是实参的一份拷贝。因此,函数可以修改它的形参(也就是实参的拷贝),而不会修改调用程序实际传递的参数。数组名也是通过传值方式传递的,但它传给函数的是一个指向该数组的指针的拷贝。在函数中,如果在数组形参中使用了下标引用操作,就会引发间接访问操作,它实际所访问的是调用程序的数组元素。因此,在函数中修改参数数组的元素实际上修改的是调用程序的数组。这个行为被称为传址调用。如果你希望在传递标量参数时也具有传址调用的语义,你可以向函数传递指向参数的指针,并在函数中使用间接访问来访问或修改这些值。
return语句用于指定从-一个函数返回的值。如果return语句没有包含返回值,或者函数不包含任何return 语句,那么函数就没有返回值。在许多其他语言中,这类函数被称为过程。在 ANSI C中,没有返回值的函数的返回类型应该声明为void。当一个函数被调用时,编译器如果无法看到它的任何声明,那么它就假定函数返回-一个整型值。对于那些返回值不是整型的函数,在调用之前对它们进行声明是非常重要的,这可以避免由于不可预测的类型转换而导致的错误。对于那些没有原型的函数,传递给函数的实参将进行缺省参数提升:char和 short类型的实参被转换为int类型,float类型的实参被转换为double类型。函数的参数是通过传值方式进行传递的,它实际所传递的是实参的一份拷贝。因此,函数可以修改它的形参(也就是实参的拷贝),而不会修改调用程序实际传递的参数。数组名也是通过传值方式传递的,但它传给函数的是一个指向该数组的指针的拷贝。在函数中,如果在数组形参中使用了下标引用操作,就会引发间接访问操作,它实际所访问的是调用程序的数组元素。因此,在函数中修改参数数组的元素实际上修改的是调用程序的数组。这个行为被称为传址调用。如果你希望在传递标量参数时也具有传址调用的语义,你可以向函数传递指向参数的指针,并在函数中使用间接访问来访问或修改这些值。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询