您的位置:58编程 > c函数指针 C 函数

c函数指针 C 函数

2023-03-20 03:33 C语言教程

c函数指针 C 函数

c函数指针

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)  

C 函数

学习C - C函数

变量作用域和生命周期

这个例子涉及一个循环的嵌套块:

你在循环块中声明和定义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()
阅读全文
以上是58编程为你收集整理的c函数指针 C 函数全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58编程 58biancheng.com 版权所有 联系我们
桂ICP备12005667号-32 Powered by CMS