C:函数调用后的指针

时间:2014-07-31 14:05:33

标签: c pointers

我必须遵循C代码:

a.b[(c+d(e,f,g)**i)]->j<-k

现在我必须添加代码才能进行编译。

其中大部分都不是问题,但真正让我烦恼的是d(e,f,g)**i部分。我理解**i是指向指针的指针,但我不知道如何在函数调用后直接处理它。

3 个答案:

答案 0 :(得分:2)

打破它:

d(e,f,g)**i

FunctionCall d with params e,f,g
Multiplied by
pointer-dereferce of i

或者:

 d    (e,f,g)     *          (*i)
Func. Params  Multiply value-stored-at-pointer

答案 1 :(得分:0)

这是相对可怕的。让我们从内到外工作,并在我们处理它们时删除它们:

  1. d是具有3个参数的函数。让我们假设它可以返回一个int,如果它不能,我们将在稍后处理:

    int e, f, g;
    int d(int, int, int);
    
  2. 如果我是指向int的指针,
  3. d(e,f,g) * *i会没问题。

    int *i;
    
  4. 如果c也是int,那么
  5. c + d(e,f,g) * *i就可以了。

    int c;
    
  6. 所以现在我们已完成括号内部。我们还希望它是一个整数,以便它可以作为数组表示法。所以我们在那里很好。让我们在没有我们解决的一些问题的情况下重写问题。

    a.b[<some integer>]->j < -k
    
  7. 我们可以很容易地做正确的事。

    int k;
    
  8. 这部分很难用语言表达,但我只是走这些类型。 b是双星,因为它使用数组括号后跟 - &gt;登录。

    struct {
        struct {
            int j;
        } **b;
    } a;
    
  9. 所以我们最终得到:

    #include <stdlib.h>
    
    int main() {
        int e, f, g;
        int d(int e, int f, int g);
        int *i;
        int c;
        int k;
        struct {
            struct {
                int j;
            } **b;
        } a;
    
        a.b[(c+d(e,f,g)**i)]->j<-k;
    }
    

答案 2 :(得分:0)

简单足够

d(e,f,g) * *i // where d(e,f,g) is a function which should return a value and
*i is a pointer value
Eg if function d(e,f,g) returns 10 and if *i=5 then then output will be 10*5 = 50