【问题标题】:Passing Addresses in C在 C 中传递地址
【发布时间】:2015-10-17 01:07:21
【问题描述】:

我是 C 新手,在使用指针时遇到了一些问题。我想将指针地址传递给另一个函数,然后将该函数中的地址传递给第三个函数。这是一个例子:

typedef struct
{
    int x;
    int y;
} Coordinate;

int main()
{
    Coordinate location;
    functA(&location);
    printf("Value of x: %d\n", location.x); //prints 10
    printf("Value of y: %d\n", location.y); //prints 20
}

void functA(Coordinate *location)
{
    location->x = 10;
    location->y = 20; 
}

这是我目前拥有的代码的简化部分。假设我希望 functA 调用另一个函数,将结构中的值减少一半,我尝试这样做,但它似乎不起作用,

void functA(Coordinate *location) 
{
    location->x = 10;
    location->y = 20;
    functB(&location);
}

void functB(Coordinate *location)
{
    location->x = location->x/2;
    location->y = location->y/2;
}

当我希望它是 510 时,输出仍然是 x = 10y = 20

我能得到一些帮助吗?

【问题讨论】:

    标签: c function pointers memory-address


    【解决方案1】:

    你已经收到了一个指向结构的指针,你不需要再次使用& 操作数。所以应该是functB(location);

    【讨论】:

      【解决方案2】:

      问题出在这一行:

      functB(&location);
      

      functA 上,您会得到Coordinate *location,意思是Coordinate 的地址,名为location。在上述行中,您传递&location,这是location 的地址,而location 又是Coordinate 的地址。 只需将其更改为:

      functB(location);
      

      【讨论】:

        【解决方案3】:

        functA() 中,location 已经是一个指针。当您再次在location 上使用运算符的地址时,您要求的是存储该指针的内存地址。所以,你不是通过functBCoordinate*,而是通过Coordinate**

        解决方法是在将& 传递给functB 时不使用它

        functB(&location);
        

        变成

        functB(location);
        

        【讨论】:

          【解决方案4】:

          在您的functA 中有这行:

           functB(&location);
          

          这会将指向指针的地址传递给functB,使其成为指向指针的指针。只需删除&:

          functB(location);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-01-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-19
            • 2014-12-06
            • 1970-01-01
            相关资源
            最近更新 更多