PDA

View Full Version : استفاده از & به جای * واسه فراخوانی با ارجاع



Developer Programmer
شنبه 16 مهر 1384, 17:41 عصر
سلام
مثلا خواستیم جستجوی خطی رو به زبان C پیاده کنیم !. کامپایلر کلید کرده که & اشتباهه. من هم نمی دونم به چی اش گیر داده!


#include <stdio.h>
#include <conio.h>
/************************************************** **/
void seq2( const int *,
const int ,
const int ,
int * );

void seq1( const int *,
const int ,
const int ,
int & );
/************************************************** **/

int main(int argc, char* argv[])
{
int a[4]={0,1,2,3};
int loc ;

seq2 ( a, 4, 2, &loc );
printf("%d",loc);

seq1 ( a, 4, 2, loc);
printf("%d",loc);

getch();
return 0;
}
/************************************************** **/

void seq2( const int *arr, //call by value
const int size, //call by value
const int key, //call by value
int *loc) //call by refrence
{
int i;
*loc= -1;
for (i=0; (i< size); i++) if (arr[i] == key) *loc = i;
}
/************************************************** **/

void seq1( const int *arr, //call by value
const int size, //call by value
const int key, //call by value
int &loc) //call by refrence
{
int i;
loc= -1;
for (i=0; (i< size); i++) if (arr[i] == key) loc = i;
}

/************************************************** **/

alireza643
شنبه 16 مهر 1384, 20:05 عصر
من کد شما رو روی سیستم خودم کامپایل کردم که فقط به آرگومان های main گیر داد وقتی اونارو برداشتم راحت کامپایل کرد به & هم اصلاً گیر نداد مشکل فکر کنم سیستم شما باشه

armin390
شنبه 16 مهر 1384, 20:12 عصر
من از vc++6 استفاده کردم و جواب داد نتیجه هر دو تابع seq هم 2 بود

C++Lover
یک شنبه 17 مهر 1384, 00:18 صبح
من هم کد شما را با vc++2005 کامپایل و اجرا کردم و درست کار کرد نتیجه هر دو تابع seq هم 2 بود

Developer Programmer
یک شنبه 17 مهر 1384, 15:19 عصر
از همه دوستان و سروران گرامی تشکر میکنم
دیگه مطمئن شدم که کد رو درست نوشتم ... هرچند که نمی دونم چرا VC و BC کلید کردن که & نباید باشه!
یکبار دیگه تشکر میکنم

seyedof
دوشنبه 18 مهر 1384, 11:38 صبح
سلام
دلیلش واضحه. احتمالا شما این رو به عنوان کد سی ک‍مپایل میکنید که خطا میده. سی با سی پلاس پلاس یک سری قواعدش فرق میکنه. در سی ما call by reference نداریم و این از خواص c++ است. اگر شما همچین کدی رو در مود c کمپایل کنید باید هم خطا بگیره.
ممنون علی

C++Lover
چهارشنبه 20 مهر 1384, 20:18 عصر
کاملا درسته در C ما call by reference نداریم. گمون کنم مشکلتون همینه.
:تشویق:

hamhik
سه شنبه 26 مهر 1384, 18:47 عصر
با سلام.
شکل کلی دستور printfبه این صورت است.
printf("%d,%f,%c,%s",esme moteghayer)
%d=motefghayero az noe int tarif kardin va % f=moteghayer ra az noe float tarif kardin va %c=moteghayero az no char tarif kardin va %s moteghayero az noe string tarif kardin
be onvane mesal
int a
printf("%d",a)
ke meghdare moteghayere a ra dar %d mirizad va chapesh mikonad

Reza_K
چهارشنبه 27 مهر 1384, 09:45 صبح
پسوند فایل را از C به CPP تغییر بدید و مجددا کامایل کنید.

Developer Programmer
چهارشنبه 27 مهر 1384, 12:00 عصر
ممنون از همه دوستان و سروران گرامی