当前位置: 首页 > 知识库问答 >
问题:

为函数指针分配内存

翟永春
2023-03-14

我有一个func添加两个NO并返回(a+B)。然后我创建了一个指向func的func指针。希望为该函数指针的数组分配内存并访问它们。代码如下。

我的问题是使用malloc的下面一行:

pp = (add_2nos*)malloc(5 * sizeof(add_2nos*))

编译时,sizeof(add_2nos*)和sizeof(add_2nos)没有任何区别。如果有什么区别??另外,如果类型转换是必要的,而我正在分配相同类型的内存…?

#include <stdio.h>
#include <stdlib.h>

int add(int a, int b) {
        return (a+b);
}

typedef int (*add_2nos)(int, int);     

int main() {

        add_2nos *pp; 
        
        // Defining an array of pointers to function add and accessing them
        pp = (add_2nos*)malloc(5 * sizeof(add_2nos*));
        pp[0] = add;
        pp[1] = add;
        printf("\n\nAdding two nos -- (14, 15): %d ", pp1[0](14, 15));
        printf("\nAdding two nos -- (16, 16): %d \n\n", pp1[1](16, 16));
}

共有1个答案

司徒志
2023-03-14

编译时,sizeof(add_2nos*)和sizeof(add_2nos)没有任何区别。如果有区别,又有什么区别呢?

add_2nosvoid(*)(int,int)-它是指向函数的指针。

add_2nos*是一个void(**)(int,int)-它是一个指针,指向一个函数的指针。

看,我们是否在C中强制转换malloc的结果。

 类似资料:
  • 我想知道何时或是否必须删除此对象。下面是一个基本类对象Object.cpp的构造函数: 我知道在分配内存时,你应该在某个时候删除它,但是我在构造函数中分配了内存,并且想再次使用变量1和2,我什么时候删除它们?

  • 一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个 指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是 函数指针。 函数指针的定义形式为: returnType (*pointerName)(param list); returnType

  • 问题内容: 在Go中,如何将函数调用返回的值分配给指针? 考虑下面的示例,注意返回一个值(不是指针): 这些都失败了: 是否确实需要局部变量?那不会招致不必要的复制吗? 问题答案: 根据规范,必须使用局部变量。 要获取值的地址,调用函数必须将返回值复制到可寻址的内存中。有副本,但这不是多余的。 Go程序通常使用值。 有时在应用程序想要区分无值和其他时间值的情况下使用A。在SQL NULL和有效时间

  • 问题内容: 我有以下功能: 其中,的类型是具有以下定义的接口: 题: 这是真的,和是 通过按引用 ,并且有它的价值被复制? 我认为: 是通过引用的,因为它是一张地图 是一个结构。因此,我应该传递指针以避免复制数据 问题答案: 接口类型只是一组方法。请注意,接口定义的成员未指定接收方类型是否为指针。这是因为 值类型的方法集是其关联的指针类型的方法集的子集 。满嘴 我的意思是,如果您具有以下条件: 然

  • 函数指针基础语法 函数指针用于指向一个函数,函数名是函数体的入口地址。函数指针可以实现面向对象编程,可以实现软件分层设计(回调函数)。 #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //数组指针 语法 梳理 //定义一个数组类型 //int a[10]