相关疑难解决方法(0)

理解C中函数指针的typedef

当我读到其他人的代码时,我总是有点难过,这些代码的typedef用于指向带参数的函数的指针.我记得在尝试理解用C语言编写的数值算法时,我花了一些时间来解决这个定义.那么,您是否可以分享您关于如何编写好的typedef指向函数(Do和Do)的提示和想法,为什么它们有用以及如何理解其他人的工作?谢谢!

c typedef function-pointers

225
推荐指数
6
解决办法
26万
查看次数

意思是:int(*b)[100]

这是什么意思:int (*b)[100]以及为了产生这个结果,这段代码的澄清是什么?

#include <iostream>
void foo(int  a[100])
{
    a [1]= 30 ;
    std::cout<<a[1]<< std::endl;
}

void boo(int a[100])
{ 
    std::cout<<a[1]<< std::endl; 
}

int main()
{
    int (*b)[100] = (int (*) [100]) malloc(100 * sizeof(int));
    *b[1] = 20;
    std::cout<< *b[1] << "\t" << b[1] << std::endl;
    foo(*b);
    boo(*b);
    std::cout<< *b[1] << "\t" << b[1] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

以上代码输出:

20  0x44ba430
30
30
20  0x44ba430
Run Code Online (Sandbox Code Playgroud)

c++ pointers

4
推荐指数
1
解决办法
936
查看次数

指向功能指针的指针

是否可以创建指向函数指针的指针,即

int32_t (*fp[2])(void) = {test_function1, test_function_2}; // initialize a function pointer

<unknown> = fp;
Run Code Online (Sandbox Code Playgroud)

需要写什么来代替未知?使用"普通"数组,我可以这样做:

int a[2] = {0, 1};

int* p = a;
Run Code Online (Sandbox Code Playgroud)

提前谢谢了.

c pointers function-pointers

3
推荐指数
1
解决办法
5804
查看次数

c中函数指针的用例

我在阅读函数指针时遇到的一个常见用例是,它们可以用来使函数更加灵活,因为函数功能的一部分可以作为参数使用.这方面的一个例子是qsort,我可以在其中创建一个比较函数来决定更大和更小的含义(升序,降序,是等的倍数),并将比较函数指针传递给qsort函数.

这里,函数repeat具有addptr作为参数,因此执行乘法.

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

int (*addptr)(int,int);

int repeat(int a,int b,int (*funcptr)(int,int))
{
    int i,ans=0;
    for(i=0;i<a;i++)
    {
        ans=(*funcptr)(ans,b);
    }
    return ans;
}


int main()
{
    addptr=&add;
    printf("%d\n",repeat(7,5,addptr));  

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

但是在没有函数指针的情况下可以完成同样的事情!

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


    int repeat(int a,int b,int func(int,int))
    {
        int i,ans=0;
        for(i=0;i<a;i++)
        {
            ans=func(ans,b);
        }
        return ans;
    }


    int main()
    {
        printf("%d\n",repeat(7,5,add)); 

        return 0;

    }
Run Code Online (Sandbox Code Playgroud)

那么为什么这甚至是函数指针的一个用途呢?第一个代码比第二个代码有什么优势?

c pointers function

0
推荐指数
1
解决办法
209
查看次数

标签 统计

c ×3

pointers ×3

function-pointers ×2

c++ ×1

function ×1

typedef ×1