所以我现在正在学习C中的指针,我正在阅读的书中有一个示例程序,但是当我运行它时它不能正常工作。代码是:
#include <stdio.h>
#include <stdlib.h>
void go_south_east(int *lat, int *lon)
{
*lat = *lat - 1;
*lon = *lon + 1;
}
int main(){
int latitude = 64;
int lontitude = -32;
go_south_east(&latitude, &lontitude);
printf("Now at [%i, %i]\n", latitude, lontitude);
return 0;
system("pause");
}
这个想法是这些“纬度和纬度”是一个物体的坐标,我们想把它移到东南。我个人认为这是错误的路线:
go_south_east(&latitude, &lontitude);
为什么我们需要这里的变量地址? 还有一个关于这一行的问题:
printf("Now at [%i, %i]\n", latitude, lontitude);
我在这里的含义是什么?对于整数值,它不应该是%d吗?
答案 0 :(得分:2)
go_south_east(&latitude, &lontitude);
我们需要变量的地址,因为您通过引用传递它们,因为您想要修改它们的值。您不希望只为函数提供两个数字,您希望它能够更改它们。因此,您需要通知函数这些变量所在的位置(它们的地址),以便函数可以在适当的位置修改它们的值。
它正常工作,因为输出为Now at [63, -31]
,因此函数正确地红色传递并更新它们的值。
答案 1 :(得分:0)
将参数传递给函数有三种方法:
您的程序正在使用Pass By Pointer。
Pass By Value看起来像这样:
void go_south_east(int lat, int lon)
{
lat = lat - 1;
lon = lon + 1;
}
如果你改变你的程序以包含上面的代码,你会看到printf()输出:“现在在[64,-32]”。这是因为您只传递了lat&amp;的值。 lon - 实际上是他们价值观的副本。该函数更改副本的值,不会影响原始值。
使用Pass By Pointer,您可以将内存中的地址传递给您的函数,原始lat和&amp;存储lon值。该功能修改存储在这些位置的数据。这就是为什么lat&amp;的当前值。主要()中的lon被改变了。