使用指针函数的参数
大多数C程序员首先使用指针来实现所谓的变量参数在功能。你实际上已经使用变量参数scanf函数——这就是为什么你必须使用&(地址运算符)变量用于scanf。现在你理解指针可以看到真的是怎么回事。
理解变量参数是如何工作的,让18新利最新登入我们看看我们如何实现交换函数c来实现交换功能,你想要做的是通过两个变量和函数交换他们的价值观。这是一个尝试实现——输入并执行下面的代码,看看会发生什么:
广告
# include < stdio。h >空白交换(int, int j) {int t;t =我;我= j;j = t;}void main () {int a、b;= 5;b = 10;printf (" % d % d \ n”, a, b);交换(a, b); printf("%d %d\n", a, b); }
当你执行这个计划,你会发现没有发生交换。的值一个和b通过交换,交换他们交换功能,但当函数返回什么也不会发生。
使这个功能正常工作,您可以使用指针,如下所示:18新利最新登入
# include < stdio。h >空白交换(int *我,int * j) {int t;t = *我;*我= * j;* j = t;}void main () {int a、b;= 5;b = 10;printf (" % d % d \ n”, a, b);交换(和,大成》); printf("%d %d\n",a,b); }
知道什么该代码,打印出来,画出两个整数一个和b,输入5和10。现在画出两个指针我和j,以及整数t。当交换被调用时,通过了吗地址的一个和b。因此,我指出一个(画一个箭头我来一个),j指出b(画一个箭头b来j)。一旦指针初始化函数调用,*我是另一个名字一个,* j是另一个名字b。现在运行代码交换。当代码使用*我和* j它真正的含义一个和b。当函数完成时,a和b被交换。
假设你不小心忘记了&当交换函数被调用,交换偶是这样的:交换(a, b);。这导致段错误。当你离开的时候了&,价值的一个传递而不是它地址。因此,我指向一个无效的位置在内存和系统崩溃*我使用。
这也是为什么scanf如果你忘记了,崩溃&在变量传递给它。的scanf使用指针函数把它读回的价值变量传递。没有&,scanf通过一个糟糕的地址和崩溃。
可变参数是最常见的一个指针的使用c。现在你明白发生了什么!