首页 > 解决方案 > 为什么这些类型定义得到相同的结果

问题描述

我编写了三种不同的类型定义,但它们执行相同的结果。那么为什么会这样。我认为结果可能会有所不同,因为我使用了相同的方式来执行该功能。


#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

标签: cpointersfunction-pointers

解决方案


function0并且function1是相同的,您只是有多余的括号。 function_pointer是指向 a 的指针function0

在函数参数中,如果您指定函数类型,则将其调整为函数指针类型(即,函数的行为就像您指定了函数指针类型一样)。所以printDigit0printDigit1表现得好像它们具有与 . 相同的声明printDigit2


推荐阅读