在C中传递地址

时间:2015-10-17 01:07:21

标签: c function pointers memory-address

我是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;
}

当我想要x = 10y = 20时,输出仍为510

我能得到一些帮助吗?

4 个答案:

答案 0 :(得分:2)

您已经收到指向结构的指针,您不需要再次使用Private Sub btnTotal_Click(sender As Object, e As EventArgs) Handles btnTotal.Click tax = 0.07 If rd1.Checked = True Then pan &= "1.00" End If If rd2.Checked = True Then bread &= "1.50" End If If rd3.Checked = True Then softdrink &= "0.85" End If If checkbox1.Checked = True Then ingredients &= "0.50" subtotal = ? subtotalTxtBox.Text = subtotal taxTxtBox.Text = tax total = subtotal * tax totalTxtBox.Text = subtotal + total 操作数。所以它应该只是&

答案 1 :(得分:2)

functA()中,location已经是指针。当您再次使用location上的运算符地址时,您要求存储该指针的内存地址。因此,您未通过functB Coordinate*,而是通过了Coordinate**

修复是在将&传递给functB

时不使用functB(&location);
functB(location);

变为

int newWidth = unscaledBitmap.getWidth() * (1 + wantedHeight /unscaledBitmap.getHeight());

Bitmap scaledBitmap = Bitmap.createScaledBitmap(
     unscaledBitmap, newWidth, wantedHeight, true
);

答案 2 :(得分:2)

问题在于这一行:

functB(&location);

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

self.scrollView.touchesMoved = func (touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("hi")
}

答案 3 :(得分:1)

在你的 functB(&location); 中,你有这一行:

functB

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

即可
connect = new SqlConnection(conStr.connectString);
connect.Open();
string updateString = "update tblbooks set quantity=quantity - 1 where book_id=@book_id";
cmd = new SqlCommand(updateString, connect);