[英]allocating memory to a function pointer
我有一個函數來添加兩個 no 並返回 (a+b)。 然后我創建了一個指向函數的函數指針。 想要為該 function 指針的數組分配 memory 並訪問它們。 代碼如下。
我的問題是使用 malloc 的以下行:
pp = (add_2nos*)malloc(5 * sizeof(add_2nos*))
sizeof(add_2nos*) 和 sizeof(add_2nos) 在編譯時沒有任何區別。 有的話有什么區別?? 另外,如果在我分配相同類型的 memory 時需要進行類型轉換...?
#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));
}
sizeof(add_2nos*) 和 sizeof(add_2nos) 在編譯時沒有任何區別。 如果有的話有什么區別?
add_2nos
是void (*)(int, int)
- 它是指向 function 的指針。
add_2nos*
是一個void (**)(int, int)
- 它是一個指針,指向指向 function 的指針。
因為在大多數架構上,所有指針都具有相同的大小,包括 function 指針和指向指針的指針,而malloc()
只需要一個數字,它沒有區別。 無論如何,您想為5
function 指針(即5 * sizeof(add_2nos)
)分配空間,而不是為指向 function 指針的5
指針分配空間。
別想了,讓編譯器自己算出來: pp = malloc(5 * sizeof(*pp));
是一種常見的模式。
另外,如果在我分配相同類型的 memory 時需要進行類型轉換...?
這個
pp = (add_2nos*)malloc(5 * sizeof(add_2nos*));
根據指向 function 指針的指針大小為您提供分配。 這可能與 function 指針相同,但可能不是。
pp = malloc(5 * sizeof(add_2nos));
或者
pp = malloc(5 * sizeof *pp);
您已將 typedef 的add_2nos
用作“指向具有特定簽名的 function 的指針”的類型名,因此要分配此類指針的數組,您只需對其直接使用 sizeof (不取消引用),或在取消引用時使用 sizeof數組指針。
指針確定 memory 地址。 解釋這一點的最簡單方法是通過以下示例:
printf("%ld\n",sizeof(unsigned char));
printf("%ld\n",sizeof(unsigned char *));
在第一行中,打印了一個 unsigned char 的大小,即 1 個字節。 在第二行中,保存信息的指針的大小,其中 unsigned char 存儲在 memory 中。 這可能因編譯器/平台而異。 例如,在https://www.onlinegdb.com/online_c_compiler上打印 8 個字節的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.