将指针传递给函数的能力非常有用,但也很容易掌握。 如果我们要编写一个程序,接受一个数字并将其加五,我们可能会编写如下内容:
#include <stdio.h> void AddFive(int Number) { Number = Number + 5; } void main() { int nMyNumber = 18; printf("My original number is %d\n", nMyNumber); AddFive(nMyNumber); printf("My new number is %d\n", nMyNumber); }
然而,这样做的问题是 Number提到 AddFive是变量的副本 nMyNumber传递给函数,而不是变量本身。 因此,线 Number = Number + 5将 5 添加到 副本中,将原始变量保留在 变量的 main()不受影响。 尝试运行程序来证明这一点。
为了解决这个问题,我们可以将一个指向数字在内存中保存位置的指针传递给该函数,但我们必须更改该函数,以便它需要一个指向数字的指针,而不是一个数字。 为此,我们改变 void AddFive(int Number)到 void AddFive(int* Number), 添加星号。 这又是程序,做了一些改动。 请注意,我们必须确保我们传递的地址 nMyNumber而不是数字本身? 这是通过添加 &标志,(你会记得)被读作“地址”。
#include <stdio.h> void AddFive(int* Number) { *Number = *Number + 5; } void main() { int nMyNumber = 18; printf("My original number is %d\n", nMyNumber); AddFive(&nMyNumber); printf("My new number is %d\n", nMyNumber); }
试着想出一个你自己的例子来证明这一点。 注意到 AddFive 函数中 Number 之前的 * 的重要性了吗? 这需要告诉编译器我们要将 5 加到变量 Number 指向的数字上,而不是将 5 加到指针本身上。 关于函数的最后一点要注意的是,您也可以从它们返回指针,如下所示:
int * MyFunction();
在此示例中,MyFunction 返回一个指向整数的指针