[英]Pass by pointer/pass by reference in C
我知道如何在函數中傳遞指針,我覺得我仍然對兩種術語感到困惑,例如按引用傳遞和按指針傳遞。
有人問我:
編寫一個程序,該程序使用指針通過將變量x傳遞給其值加倍的函數來傳遞變量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;
}
指針傳遞實際上是按值傳遞,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*?
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.