c语言如何把函数保存至一个数据类型为unsigned char的数组中
时间: 2024-05-02 10:21:45 浏览: 99
C语言中判断一个char*是不是utf8编码
首先,需要定义一个函数指针,指向要保存的函数。然后,将函数指针转换为unsigned char类型的指针,以便在数组中进行存储。最后,将函数指针所指向的函数的代码复制到数组中。
以下是一个示例代码:
```c
#include <stdio.h>
void func1() {
printf("This is func1\n");
}
void func2() {
printf("This is func2\n");
}
int main() {
unsigned char arr[1024];
unsigned char* p = arr;
void (*func_ptr)();
// 保存func1函数到数组中
func_ptr = func1;
memcpy(p, (unsigned char*)&func_ptr, sizeof(func_ptr));
p += sizeof(func_ptr);
// 保存func2函数到数组中
func_ptr = func2;
memcpy(p, (unsigned char*)&func_ptr, sizeof(func_ptr));
p += sizeof(func_ptr);
// 执行保存的函数
void (*saved_func)();
saved_func = (void (*)())arr;
saved_func();
saved_func = (void (*)())(arr + sizeof(func_ptr));
saved_func();
return 0;
}
```
在上面的代码中,我们定义了两个函数func1和func2,并将它们保存到一个长度为1024的unsigned char类型的数组中。我们首先定义了一个指向函数的指针func_ptr,然后将它转换为unsigned char类型的指针p,以便在数组中进行存储。我们使用memcpy函数将函数指针的值复制到数组中,然后将指针p向前移动sizeof(func_ptr)个字节,以便存储下一个函数指针。最后,我们执行保存的函数,将数组中的函数指针转换为函数指针类型并执行它们。
阅读全文