繁体   English   中英

C-Pointers(简单程序)

[英]C-Pointers(simple program)

所以我现在正在学习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吗?

go_south_east(&latitude, &lontitude);

我们需要变量的地址,因为您通过引用传递它们,因为您想要修改它们的值。 您不希望只为函数提供两个数字,您希望它能够更改它们。 因此,您需要通知函数这些变量所在的位置(它们的地址),以便函数可以在适当的位置修改它们的值。

并且它正常工作,因为输出Now at [63, -31] ,因此函数正确地红色传递的值并更新它们。

将参数传递给函数有三种方法:

  • 通过价值
  • 通过指针
  • 通过参考传递

您的程序正在使用Pass By Pointer。

Pass By Value看起来像这样:

void go_south_east(int lat, int lon)
{
    lat = lat - 1;
    lon = lon + 1;
}

如果你改变你的程序以包含上面的代码,你会看到printf()输出:“现在在[64,-32]”。 这是因为您只传递了lat&lon的 - 实际上是它们的值的副本。 该函数更改副本的值,不会影响原始值。

通过Pass By Pointer,您可以将存储原始lat&lon值的内存中的地址传递给您的函数。 该功能修改存储在这些位置的数据。 这就是为什么main()中lat&lon的当前值被改变的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM