C语言中的函数指针是一种特殊的指针,它指向一个函数。函数指针可以用来调用函数,也可以用来传递函数作为参数。它允许程序员在运行时动态地选择和调用不同的函数。
C语言中的函数指针有三个部分组成:返回值类型、函数名和参数列表。返回值类型是指该函数执行完成后返回的类型;函数名是该函数的标识符;参数列表是该函数所需要的参数列表。
typedef int (*func_ptr)(int, int); // 定义一个func_ptr 类型的指针: // 接受两个int 参数并返回一个int 类型的结果 int add(int a, int b) { // 定义一个add 函数 return a + b; // 返回a+b 的结果 } func_ptr f = &add; // 声明f 是一个func_ptr 类型的指针,并把add 函数地址赋予f int result = f(1, 2); // 这里就相当于让f 来执行add 函数:result = add(1, 2)
这个例子涉及一个循环的嵌套块:
你在循环块中声明和定义count2:
count2在每次循环迭代时重新创建,初始值为0。
在每个循环迭代期间,count2被创建,初始化,递增和销毁。
变量count1存在于main()块级别。
它在递增时继续存在。
#include <stdio.h>
int main(void) {
int count1 = 1; // Declared in outer block
do {
int count2 = 0; // Declared in inner block
++count2;
printf("count1 = %d count2 = %dn", count1, count2);
} while( ++count1 <= 10);
// count2 no longer exists
printf("count1 = %dn", count1);
return 0;
}
上面的代码生成以下结果。
以下代码有两个名为count的变量。
在循环块内,局部变量将“隐藏”存在于main()块级别的count版本。
count是指的是在当前块的声明。
在do-while循环中,只能达到局部版本的count。
循环块中的printf()显示局部count值,该值始终为1。
一旦退出循环,外部count变量变为可见,最后一个printf()从循环中显示其最终值。
#include <stdio.h>
int main(void) {
int count = 0; // Declared in outer block
do {
int count = 0; // This is another variable called count
++count; // this applies to inner count
printf("count = %dn", count);
}
while( ++count <= 10); // This works with outer count
printf("count = %dn", count); // Inner count is dead, this is outer count
return 0;
}
上面的代码生成以下结果。
每个函数的主体是一个块。
在函数中声明的变量是局部的函数。
函数的一般形式如下所示:
Return_type Function_name(type1 para1, type2 para2,...) { // Statements... }
函数体中的语句可以不存在。
从一个函数的返回值与body中的语句被指定为void。
对于具有非void返回类型的函数,其返回语句必须返回指定返回类型的值。
该参数指定在调用函数时应传递给该函数的值的类型。
传递给与参数相对应的函数的值称为参数。
函数参数由参数名称后面的类型组成。
调用函数的一般形式是以下表达式:
Function_name(argument1, argument2, ...)
您使用函数的名称后跟一个括号中的逗号分隔的参数列表。
一个函数调用本身可以作为一个语句显示,如下所示:
printf("hi.");
这样调用的函数可以是一个返回值的函数。
在这种情况下,返回的值被丢弃。
已经使用void返回类型定义的函数只能这样调用。
返回值的函数可以在表达式中。
例如:
result = 2.0*sqrt(2.0);
函数的名称可以是C中的任何合法名称。
函数参数是需要指定的参数的占位符。
函数的参数是具有其类型的参数名称列表,连续的参数用逗号分隔。
将参数传递给函数时,将参数值复制到函数中。
我们再来看一下函数的一般形式:
Return_type Function_name(... { // Statements... }
Return_type指定函数返回的值的类型。
您可以先定义main()函数,然后定义函数Average()。
// #include ... int main(void) { ... Average... } double Average(double x[], size_t n) { ... }
这不会编译。
当编译器看到main()中的Average()函数时,它不会知道Average()函数。
我们可以使用函数原型来解决这个问题。
函数声明或函数原型是定义函数原型的语句。
函数原型定义函数的名称,返回值类型以及每个参数的类型。
一个函数的原型与函数头完全相同,后缀中带有一个分号。
以下代码显示了如何创建函数原型。
// Function prototypes double Average(double data_values[], size_t count); int main(void) { ... } // Definitions for Average()
C 练习实例71 C 语言经典100例题目:编写input()和output()函数输入,输出5个学生的数据记录。程序分析:无。程序源代码://Crea...
C 练习实例87 C 语言经典100例题目:回答结果(结构体变量传递)。 程序分析:无。程序源代码://Created by www..cn on 15/11/9...
C 练习实例91 C 语言经典100例题目:时间函数举例1程序分析:无。程序源代码://Created by www..cn on 15/11/9.//Copyright2015...
C 练习实例95 C 语言经典100例题目:简单的结构体应用实例。程序分析:无。程序源代码://Created by www..cn on 15/11/9.//Copy...
C 库函数 - isspace() C 标准库 - ctype.h描述C 库函数 int isspace(int c) 检查所传的字符是否是空白字符。标准的空...