2013-12-07 4 views
0

Я знаю, как передать указатель в функции, я чувствую, что все еще путаю с двумя терминами, например, по ссылке и передаю по указателю.Передать указатель/передать по ссылке в C

меня попросили это:

Написать программу, которая использует указатели передать переменную х со ссылкой на функции, где удвоенным его значение. Тип возвращаемой функции должен быть недействительным. Значение переменной должно быть напечатано из main() после вызова функции. Начальная величина равна 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; 
} 
+4

Чистый С не поддерживает "пройти по ссылке". Вы либо передаете значение ('f (x)'), либо передаете значение указателя на значение (непосредственно через 'f (& x)' или через 'int * xp = & x; f (xp);') , Поэтому, если вас попросят привести пример прохождения по ссылке, терминология используется очень слабо и может просто означать случай 'f (& x)'. – lurker

+3

Чтобы уточнить, у C нет ссылок, поэтому, когда кто-то говорит «pass by reference» _ в языке C, они действительно означают «pass by pointer» –

+0

см. Здесь для хорошего учебника http://www.codingunit.com/c -tutorial вызова по значению или вызову по ссылке – holzben

ответ

2

Проход через указатель на самом деле проходит по значению, не существует такого понятия передачи по ссылке в С.

В 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*? 
} 
Смежные вопросы