我知道如何在函数中传递指针,我觉得我仍然会混淆两个术语,例如通过引用传递和传递指针。
我被问到这个问题:
编写一个程序,使用指针通过引用传递变量x 函数,其值加倍。函数的返回类型应该是无效的。该 在函数调用之后,应该从main()打印变量的值。该 x的原始值是5。
我写了下面的代码。你能根据问题的要求告诉我哪个评论编号是正确的,并清楚我的疑问吗?
#include <stdio.h>
//double pointer
//void double_ptr(int **x_ptr)
//{
// **x_ptr *=2;
//}
void double_ptr(int *x_ptr)
{
*x_ptr *=2;
}
int main()
{
int x=5;
int *x_ptr=&x; // single pointer
//double_ptr(*x_ptr); // this is out of question's demand.
//int**x_x_ptr=&x_ptr; // double pointer
//double_ptr(&x_ptr); // 1. pass with double pointer
//double_ptr(x_x_ptr); //2. pass with double pointer
//printf("%d",**x_x_ptr); //3.print with double pointer
double_ptr(x_ptr); //4.pass by pointer?
//double_ptr(&x); //5.pass by reference?
printf("%d",*x_ptr);
return 0;
}
答案 0 :(得分:3)
传递指针实际上是按值传递,在C中没有通过引用传递的概念。
在C中,通过引用传递==通过指针传递。
void double_ptr(int *x_ptr)
{
*x_ptr *=2;
}
int main()
{
int x=5;
double_ptr(&x); /* a value is being passed*/
}
通过引用传递(在C ++中):
void double_ptr(int& x_ptr)
{
x_ptr *=2;
}
int main()
{
int x=5;
int &x_ptr=x;
double_ptr(x_ptr); /* no temporary is being created i.e. no extra memory allocation is here*?
}