#include "string.h"
#include "stdio.h"
#include "stdlib.h"
/*
* 函数类型基础:
* 函数类型三要素:名称、参数、返回值
* C语言中函数有自己特定的类型
*
* C语言中通过typedef为函数类型重命名
* typedef return_type func_name(parameter list);
* 例如:typedef int Func(int, int);
*
* 函数指针:
* 函数指针用于指向一个函数
* 函数名是指向该函数体的入口地址(函数名就是函数指针)
* 1,可以通过函数类型定义函数指针:FuncType* pointer;
* 2,也可以直接定义:return_type (*func_pointer)(parameter list);
* func_pointer 为函数指针变量名
* return_type 为指向函数的返回值类型
* parameter list 为指向函数的参数类型列表
*
*/
// 如何定义一个数组类型
// 如何定义一个数组指针的类型
// 如何定义一个指向数组类型的一个指针变量
void main01() {
// int array[10];
// 如何定义一个数组类型
typedef int(MyArrayType)[10];
MyArrayType myArray; // <==> int array[10]
myArray[0] = 0;
{
int array2[10];
// 如何定义一个数组指针的类型
typedef int(*PtrMyArrayType)[10];
PtrMyArrayType ptrMyArray;
ptrMyArray = &array2;
(*ptrMyArray)[0] = 11;
printf("array2[0]:%d\n", array2[0]);
{
int a = 10;
int* p = NULL;
p = &a;
}
}
{
// 如何定义一个指向数组类型的一个指针变量
int array3[10];
int(*ptrM)[10]; // 定义一个指针变量,告诉c编译器给我分配4个字节内存,这个变量指向一个数组。
// ptrM++会后移一个数组单位:(4*10) 个字节
ptrM = &array3;
(*ptrM)[0] = 12;
printf("array3[0]:%d\n", array3[0]);
}
system("pause");
}
// 如何定义函数类型
// 如何定义函数指针类型
// 如何定义一个指向函数的指针变量
//testFunc是函数名,函数名代表函数首地址,函数名就是函数指针
int testFunc(int i) {
printf("i:%d\n", i);
return 0;
}
void main() {
// 定义函数类型
typedef int (MyFuncType)(int);
MyFuncType *myfunc; // 函数指针变量
myfunc = testFunc;
//myfunc = &testFunc; // ok 对函数名字&取地址,和不取地址,效果一样。兼容之前代码。
myfunc(10); // 通过函数指针变量,可以找到函数入口,可以执行函数
// <==>
typedef int (*MyFuncTypePtr)(int); // 定义一个函数指针类型
MyFuncTypePtr myfuncptr;
myfuncptr = testFunc;
myfuncptr(20);
// 直接定义一个指向函数的指针变量
int (*ptrMyFuncVar)(int);
ptrMyFuncVar = testFunc;
ptrMyFuncVar(40);
system("pause");
}
C++函数指针基础
最新推荐文章于 2025-12-15 07:52:40 发布
这篇博客深入探讨了C语言中的函数类型、函数指针及其使用。通过typedef关键字,博主展示了如何为函数类型和数组类型创建别名,并详细解释了如何定义和操作数组指针以及指向函数的指针变量。示例代码涵盖了如何定义和调用函数指针,以及如何通过指针访问和修改数组元素。此外,还讨论了如何定义和使用指向数组类型的指针变量。
8285

被折叠的 条评论
为什么被折叠?



