تور لحظه آخری
امروز : سه شنبه ، 13 آذر 1403    احادیث و روایات:  امام علی (ع):راستى عزّت است و نادانى ذلّت.
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

صرافی ارکی چنج

صرافی rkchange

سایبان ماشین

دزدگیر منزل

تشریفات روناک

اجاره سند در شیراز

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

Future Innovate Tech

پی جو مشاغل برتر شیراز

آراد برندینگ

خرید یخچال خارجی

موسسه خیریه

واردات از چین

حمية السكري النوع الثاني

ناب مووی

دانلود فیلم

بانک کتاب

دریافت دیه موتورسیکلت از بیمه

طراحی سایت تهران سایت

irspeedy

درج اگهی ویژه

تعمیرات مک بوک

دانلود فیلم هندی

قیمت فرش

درب فریم لس

زانوبند زاپیامکس

روغن بهران بردبار ۳۲۰

قیمت سرور اچ پی

خرید بلیط هواپیما

بلیط اتوبوس پایانه

قیمت سرور dl380 g10

تعمیرات پکیج کرج

لیست قیمت گوشی شیائومی

خرید فالوور

پوستر آنلاین

بهترین وکیل کرج

بهترین وکیل تهران

خرید اکانت تریدینگ ویو

خرید از چین

خرید از چین

تجهیزات کافی شاپ

ساختمان پزشکان

محصولات فوراور

خرید سرور اچ پی ماهان شبکه

دوربین سیمکارتی چرخشی

همکاری آی نو و گزینه دو

کاشت ابرو طبیعی و‌ سریع

الک آزمایشگاهی

الک آزمایشگاهی

خرید سرور مجازی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

لوله و اتصالات آذین

قرص گلوریا

نمایندگی دوو در کرج

خرید نهال سیب

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

رفع تاری و تشخیص پلاک

پرگابالین

دوره آموزش باریستا

مهاجرت به آلمان

بهترین قالیشویی تهران

بورس کارتریج پرینتر در تهران

تشریفات روناک

نوار اخطار زرد رنگ

 






آمار وبسایت

 تعداد کل بازدیدها : 1837167669




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

مشکل این تابع من چیه؟؟ -


واضح آرشیو وب فارسی:سایت ریسک: مشکل این تابع من چیه؟؟ sozan2009 13 آبان 1387, 00:20این تابع قراره یه لیست پیوندی خطی رو معکوس کنه ولی نمی دونم چرا در آخر آدرس متغیر "l " را اشتباهی میده بعد از اینکه لیست رو معکوس کرد وقتی از درون ای تابه لیست معکوس شده رو چاپ می کنم درست نشون میده .اما وقتی می خوام از درون تابع اصلی فراخانی کنم بعد از عملیات لیست را برابر صفر می گیره !!! void main_list::invert(list*l) { list*temp,*s,*p; p=l; temp=l->next; p->next=0; while(temp!=0) { s=temp->next; temp->next=l; l=temp; temp=s; } p->next=0; print(l); } ممنون میشم بهم کمک کنین:rose: the_king 13 آبان 1387, 03:13همانطوری که خودتان هم تست کرده بودید، کد داخل تابع ()Invert ای که نوشته اید درسته، شما صرفا یک نکته ظریف را در نظر نگرفته بودید، آنهم این نکته بود که شما مقدار l را به تابع ()Invert ارسال کرده اید و تابع ()Invert به خود l دسترسی ندارد. شما شروع لیست را با یک اشاره گر به نام l نشان داده اید که مقدار آنرا به عنوان پارامتر ورودی به تابع ()Invert ارسال می کنید. آنچیزی که شما به تابع ()Invert ارسال کردید، یک اشاره گر به لیست است، یعنی در حقیقت آدرس مکانی از حافظه که اولین عنصر لیست در آن قرار دارد. کد های داخل تابع هم ترتیب عناصر لیست را معکوس می نماید، اما تابع آدرس خود متغیر l را نمی داند و نمی تواند مقدار داخل l ای که در بیرون از تابع تعریف شده را تغییر دهد. برای همین l همچنان به همان موقعیت اولین عنصر لیست اشاره خواهد کرد که پیش از اجرای تابع ()Invert وجود داشت. کاری که باید انجام دهید این است که بجای ارسال مقدار l، آدرس متغیر l را ارسال کنید. در واقع اشاره گری که به اشاره گر اشاره می کند. به همین خاطر من در تعریف پارامتر ورودی تابع ()Invert از دو ستاره (**) بجای یک ستاره (*) استفاده کردم. با اعمال کردن این تغییر کوچک، تغییر موقعیت l در داخل تابع ()Invert به درستی انجام می شود : void main_list::invert(list **l) { list *temp,*s,*p; p=*l; temp=p->next; p->next=0; while(temp!=0) { s=temp->next; temp->next=*l; *l=temp; temp=s; } p->next=0; print(*l); } کد شما پس از تغییر بصورت یک برنامه ساده بازنویسی کردم که سه تابع اضافه دارد : تابع ()add برای اضافه کردن آیتم به لیست تابع ()clear برای پاک کردن کلیه عناصر لیست تابع ()print برای چاپ کردن لیست در روتین اصلی ()main ابتدا عناصر لیست تهی چاپ می شود. سپس پنج عنصر با مقدار های 1 الی 5 به لیست اضافه می گردد. سپس عناصر لیست مجددا چاپ می شود. سپس لیست معکوس می گردد. سپس عناصر لیست مجددا چاپ می شود. سپس عناصر لیست پاک می شوند. سپس عناصر لیست مجددا چاپ می شود. #include <stdio.h> #include <conio.h> struct list { int value; list *next; }; void invert(list **l) { list *temp,*s,*p; p=*l; temp=p->next; p->next=0; while(temp!=0) { s=temp->next; temp->next=*l; *l=temp; temp=s; } p->next=0; } void add(list **l,int value) { list *p; if (*l==0) { *l=new list; (*l)->value=value; (*l)->next=0; } else { p=*l; while (p->next!=0) p=p->next; p->next=new list; p=p->next; p->value=value; p->next=0; } } void clear(list **l) { list *p=*l; while (p!=0) { delete p; p=p->next; } *l=0; } void print(list *l) { list *p; p=l; while (p!=0) { printf("%d > ",p->value); p=p->next; } printf("null "); } void main() { clrscr(); list *l=0; print(l); add(&l,1); add(&l,2); add(&l,3); add(&l,4); add(&l,5); print(l); invert(&l); print(l); clear(&l); print(l); getch(); }




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 197]

bt

اضافه شدن مطلب/حذف مطلب







-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن