Both function pointers and lambda expressions allow functions to be passed as arguments to callback functions. Function pointers hold variables pointing to the address of a function, while lambda expressions are anonymous function objects that define functions on the fly. Through practical examples, we demonstrate the use of function pointers and lambda expressions to sum array elements. These techniques are essential for writing flexible and scalable C code.
C function pointers and lambda expressions: Uncovering the magic of callbacks
Introduction
Function pointers and lambda expressions play a crucial role in C, they allow passing functions as parameters to callback functions. In this article, we'll take an in-depth look at function pointers and lambda expressions and demonstrate their practical use through practical examples.
Function pointer
The function pointer is a variable that holds the address of the function. They allow functions to be passed as a value, just like other variables. To declare a function pointer, follow the following format:
// 指向具有指定签名的函数的指针 typedef int (*fptr)(int);
lambda expression
lambda expression is an anonymous function object that allows a function to be defined on the fly wherever a function is required. Their syntax is as follows:
[capture-list](parameter-list) -> return-type { body };
Practical case
The following is a practical case that demonstrates how to use function pointers and lambda expressions to sum the elements in an array:
Code segment 1: Using function pointer
#include <iostream> // 求和函数 int sum(int a, int b) { return a + b; } // 使用函数指针 using namespace std; int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); // 指向求和函数的函数指针 int (*ptr)(int, int) = ∑ int total = 0; for (int i = 0; i < size; i++) { total += ptr(arr[i], arr[i + 1]); } cout << "Total: " << total << endl; return 0; }
Code segment 2: Using lambda expression
#include <iostream> // 使用 lambda 表达式 using namespace std; int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); int total = 0; for (int i = 0; i < size; i++) { total += [](int a, int b) -> int { return a + b; }(arr[i], arr[i + 1]); } cout << "Total: " << total << endl; return 0; }
Understanding Code
In code segment 1, we use a function pointer ptr
to hold the address pointing to the summation function sum
. We iterate over the array, passing each element and its subsequent elements to ptr
. The sum function returns the sum of two elements, added to total
.
In code snippet 2, we define an anonymous summation function using a lambda expression. Unlike function pointers, lambda expressions define functions on the fly when needed. We iterate over the array in the same way as snippet 1, passing the elements to a lambda expression to sum.
Conclusion
Function pointers and lambda expressions are crucial for passing functions to callback functions. Function pointers provide a mechanism to pass functions through simple variables, while lambda expressions allow anonymous functions to be defined dynamically. By understanding these techniques, you can write flexible and scalable C code.
The above is the detailed content of C++ function pointers and lambda expressions: Uncovering the magic of callbacks. For more information, please follow other related articles on the PHP Chinese website!