تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 15

نام تاپيک: ایراد این کد

  1. #1
    پروفشنال Petros's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    سوال بسیار جالب و بجایی بود
    پست ها
    974

    پيش فرض ایراد این کد

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  2. #2
    پروفشنال Petros's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    سوال بسیار جالب و بجایی بود
    پست ها
    974

    پيش فرض

    نمیدونه کسی آیا؟

  3. #3
    کـاربـر بـاسـابـقـه god of war 2's Avatar
    تاريخ عضويت
    Jun 2007
    پست ها
    585

    پيش فرض

    اشکال در خط :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    هست.
    بهتره برای ایجاد یک رشته از کاراکتر ها همیشه از آرایه استفاده کنید مثل زیر:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در آرایه ها همیشه متغییر بدون اندیس به اولین عضو آرایه اشاره میکنه.اما در مورد اول, اشارگر به اشارگر آرایه نسبت داده میشه یعنی دو مرحله اشاره صورت میگیره که در نهایت در تابع سعی بر تغییر اشارگر میکنید که با کرش مواجه میشید.

  4. این کاربر از god of war 2 بخاطر این مطلب مفید تشکر کرده است


  5. #4
    پروفشنال Petros's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    سوال بسیار جالب و بجایی بود
    پست ها
    974

    پيش فرض

    شما این دستور رو تماشا(!) کنید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    وقتی به فراخوانی تابع میرسه، میشه انتساب اشاره گرها. که آدرس موجود در p به درون a ریخته میشود و هر دو به یک نقطه (که همون C است) اشاره میکنند.

    اما تو اون رشته ها:

    مگه متغیر C دارنده ی آدرس اولین خونه رشته نیست؟ مگه موقع ارسال، انتساب اشاره گر ها صورت نمیگیره و Str تبدیل به یک نام دیگه برای اون محل حافظه نمیشه؟

  6. #5
    کـاربـر بـاسـابـقـه god of war 2's Avatar
    تاريخ عضويت
    Jun 2007
    پست ها
    585

    پيش فرض

    وقتی به فراخوانی تابع میرسه، میشه انتساب اشاره گرها. که آدرس موجود در p به درون a ریخته میشود و هر دو به یک نقطه (که همون C است) اشاره میکنند.
    کاملا درسته و علتش هم اینه که خود c یک اشارگر نیست!

    در کد قبلی آدرس اشارگر در اشارگر دیگر قرار میگرفت.
    شما در تابع توسط عملگر دسترسی به مقدار (*) به آدرس اشارگر که در واقع به عنوان مقدار (Value) در اشاگر دیگر ریخته شده دسترسی پیدا میکنید نه به حرف t یا اولین خانه از آرایه.
    طبق تصویر:
    Last edited by god of war 2; 05-06-2012 at 22:07. دليل: اضافه کردن تصویر

  7. این کاربر از god of war 2 بخاطر این مطلب مفید تشکر کرده است


  8. #6
    اگه نباشه جاش خالی می مونه p d's Avatar
    تاريخ عضويت
    Apr 2009
    محل سكونت
    قبرستون
    پست ها
    449

    پيش فرض

    اشکال کد اولتون استفاده غلط از اشاره گر هاست. در واقع از لحاظ ساختاری و ظاهری مشکل نداره . مشکل تویه پاس دادن متغییر ها نیست. مشکل تویه رم و ران تایم اتفاق میوفته.
    برای اثبات این و تست کنید:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    جالب بود ! نه ؟
    فرق int با رشته اینه که وقتی به int اشاره میکنید میشه کل 2بایت(اگه int رو 2بایتی در نظر بگیریم) ولی وقتی ب رشته اشاره میکنید میشه 1 char اولش. و حتما این و میدونید که محل اشاره گر و محلی که بهش اشاره میکنه جداست. تویه مثال قیلی اشاره گرها مورد نظر هستن نه رشته ای که اشاره میکنید. رشته میتونه 100 char باشه مثلا ولی اشاره گر فقط به خونه اول اشاره میکنه.
    اول این کد و تست کنید تا بعد اگه لازم بود توضیح بدم.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Last edited by p d; 05-06-2012 at 22:16.

  9. این کاربر از p d بخاطر این مطلب مفید تشکر کرده است


  10. #7
    پروفشنال Petros's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    سوال بسیار جالب و بجایی بود
    پست ها
    974

    پيش فرض

    تشکر از هر دو دوست.

    من چندین بار پستتون رو از اول تا آخر خوندم، ولی خب، مشکل IQ تو این زمونه شایع هستش.

    توی تصویر زیر متغیر a دارای آدرس 16CC و اشاره گر هم دارای آدرس 12FC میباشد. ما با استفاده از عملگر * میگیم محتویات آدرسی که در تو هست رو نشون بده. مثلا cout << *p
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    خب تصویر زیر هم توی c یه آدرسه. میخواهیم اون رو دیرفرنس کنیم و توش مقدار بریزیم.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    راستی یه نکته. اون پنج بایت بالا بدون نام هستش دیگه؟

    ممنون

  11. #8
    اگه نباشه جاش خالی می مونه p d's Avatar
    تاريخ عضويت
    Apr 2009
    محل سكونت
    قبرستون
    پست ها
    449

    پيش فرض

    خب تویه این کد دقیقا این اتفاق میوفته دیگه .
    جای 1 ؛ 8 میذاره.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مشکل کجاست الان ؟

  12. این کاربر از p d بخاطر این مطلب مفید تشکر کرده است


  13. #9
    پروفشنال Petros's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    سوال بسیار جالب و بجایی بود
    پست ها
    974

    پيش فرض

    مشکل اینجاست که آرایه مشکل نداره، ولی اشاره گر رشته ای مشکل داره. من میخوام به یه درکی برسم که چرا اشاره گر رشته ای و دیفرنس کردن و مقدار دادن متفاوته با آرایه ها.

    همونطور که میدونید آرایه هم فرزند اشاره گرهاست (ولی خب استاتیک)

    در ضمن یکی بگی این دو تا چیه هستن. تفسیر کنه، آیا اولیت عملگرها تو این دو تا رعایت میشه؟

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  14. #10
    پروفشنال Petros's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    سوال بسیار جالب و بجایی بود
    پست ها
    974

    پيش فرض

    راستی شما بچه شمسی پور هستی؟

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •