我是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 = 10
和y = 20
时,输出仍为5
和10
。
我能得到一些帮助吗?
答案 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);