c - 为什么这些类型定义得到相同的结果
问题描述
我编写了三种不同的类型定义,但它们执行相同的结果。那么为什么会这样。我认为结果可能会有所不同,因为我使用了相同的方式来执行该功能。
#include <stdio.h>
int* digit(int* number){
return number;
}
typedef int*function0(int*);
typedef int*(function1(int*));
typedef int*(*function_pointer)(int*);
void printDigit0(function0 p, int* digit){
printf("%d", *p(digit));
}
void printDigit1(function1 p, int* digit){
printf("%d", *p(digit));
}
void printDigit2(function_pointer p, int* digit){
printf("%d", *p(digit));
}
int main() {
int a = 10;
printDigit0(digit, &a);
printDigit1(digit, &a);
printDigit2(digit, &a);
return 0;
}
他们都印了 10
解决方案
function0
并且function1
是相同的,您只是有多余的括号。 function_pointer
是指向 a 的指针function0
。
在函数参数中,如果您指定函数类型,则将其调整为函数指针类型(即,函数的行为就像您指定了函数指针类型一样)。所以printDigit0
并printDigit1
表现得好像它们具有与 . 相同的声明printDigit2
。
推荐阅读
- python - 当程序在正确的端口上侦听时,为什么“[Errno 61] Connection refused”,套接字绑定到所有接口?
- javascript - 在 JavaScript 中动态解析 JSON 数组
- proxy - 在 download_localhost 中使用 Kubespray,download_file 错误
- python - Python 3.7+ 规范是否保证 `collections.OrderedDict 不是 dict`?
- php - 如何从 RingCentral SMS 响应中获取 conversationId?
- python - 删除 2D numpy 数组中的重复行,保持第一个实例和排序
- javascript - 音频流未添加到 html 画布
- python-3.x - Elixir Interop:使用长时间运行的数据流 python 进程实例化受监督的通信
- google-sheets - 如何遍历谷歌表格中的函数?
- regex - 提取两个单词之间的文本,带验证的多行