نمایش نتایج 1 تا 5 از 5

نام تاپیک: سوال در مورد ارایه ها در C++‎

  1. #1

    سوال در مورد ارایه ها در C++‎

    سلام دوستان کسی میدونه خط 4 این تکه کد چه معنی میده که جواب رو گزینه 3 کرده؟ کلا این مدل تخصیص مقدار به خانه های آرایه چه معنی داره؟ لینکی که ضمیمه کردم صورت سوال هست
    index.jpghttps://s19.picofile.com/file/8433944734/index.jpg




  2. #2

    نقل قول: سوال در مورد ارایه ها در C++‎

    نقل قول نوشته شده توسط paria92 مشاهده تاپیک
    سلام دوستان کسی میدونه خط 4 این تکه کد چه معنی میده که جواب رو گزینه 3 کرده؟ کلا این مدل تخصیص مقدار به خانه های آرایه چه معنی داره؟ لینکی که ضمیمه کردم صورت سوال هست
    index.jpghttps://s19.picofile.com/file/8433944734/index.jpg
    آرایه ها در حافظه به صورت ترتیبی ذخیره میشوند، بنابراین آرایه int a1[2][3] به صورت 24=( (3*2)*4 ) بایت پشت سرهم تعریف میشود
    بنابراین دستور a1[1,0][1,0] به اولین آدرس آفست شروع آرایه اشاره خواهد کرد یعنی انگار دقیقا بنویسید a1[0][0]
    یعنی اگر از نحو a[1,0][1,0] استفاده کنید کامپایلر دقیقا بجای اعداد مشخص شده آدرس اندیس های آرایه را محاسبه میکنه و جایگزین میکنه یعنی داریم
    byte 0..4 == a1[1,0][1,0] == a1[0][0]
    byte 4..8 == a1[1,0][1,1] == a1[0][1]
    byte 8..12 == a1[1,0][1,2] == a1[0][2]
    ----------------------------
    byte 12..16 == a1[1,1][1,0] == a1[1][0]
    byte 16..20 == a1[1,1][1,1] == a1[1][1]
    byte 20..24 == a1[1,1][1,2] == a1[1][2]

    البته این نحو هم هیچ تفاوت تکنیکی در برنامه نخواهد داشت و کد خروجی یکسان خواهد داشت
    حتی اگر اینطوری تعریف کنید ( 1+(a1+1)*)* == a1[1][1]
    ویا اگر اینطوری تعریف کنید [a1+1] 2[a1] این دستور به مقدار byte 16..20 اشاره میکنه
    جالبتر این هست اگر اینو بنویسید [a2]2 به آدرس آفست شروع بایت 8 اشاره میکنه یعنی یک *int
    بنابراین تعریف های اینچنینی آرایه ها در زبان سی و یا سی پلاس پلاس هیچ فایده ای که ندارد، تازه باعث مبهم شدن و ناخوانا شدن برنامه ها هم میشود تعریف های اینچنینی فقط برای موارد آموزشی کاربرد دارند که اونهم مشخص نیست برای چی هست؟ گمراه کردن دانشجو ویا خفن جلوه دادن زبان برنامه نویسی؟
    به هرحال استفاده ار نحوهای استاندارد بیشترین کاربردی می باشد.

  3. #3

    نقل قول: سوال در مورد ارایه ها در C++‎

    ممنونم از پاسخگوییتون
    ولی ببخشید دوست گرامی با این توضیحاتی که شما فرمودین a[1,0][1,0] مساوی هست با a[0][0] و از آنجایی که a[0][0] در تعاریف برنامه برابر 0 است بنابراین میبایست گزینه 1 پاسخ صحیح بشد درحالی که گزینه 3 پاسخ صحیح شده خود کامپایلر نیز عدد 9 را در خروجی بر میگرداند.

  4. #4

    نقل قول: سوال در مورد ارایه ها در C++‎

    نقل قول نوشته شده توسط paria92 مشاهده تاپیک
    ممنونم از پاسخگوییتون
    ولی ببخشید دوست گرامی با این توضیحاتی که شما فرمودین a[1,0][1,0] مساوی هست با a[0][0] و از آنجایی که a[0][0] در تعاریف برنامه برابر 0 است بنابراین میبایست گزینه 1 پاسخ صحیح بشد درحالی که گزینه 3 پاسخ صحیح شده خود کامپایلر نیز عدد 9 را در خروجی بر میگرداند.
    چرا جواب باید گزینه اول(0) باشه؟ منهم صرفا رفتار کامپایلر توضیح دادم
    بنابراین در این برنامه آفست بایت 0..4 یا همان a[0][0] در طول برنامه دوبار مقدار دهی شده، یکبار در خط 2 و یکبار در خط 4 ، بنابرین آخرین مقداردهی به اون آفست برابر با 9 بوده

  5. #5

    نقل قول: سوال در مورد ارایه ها در C++‎

    اکی دوست خوبم کاملا متوجه شدم ممنونم از توضیحات جامع شما

تاپیک های مشابه

  1. حرفه ای: دانلود سورس تابلوی تبلیغاتی Led و سورس office 2007
    نوشته شده توسط farboodj1375 در بخش برنامه نویسی در 6 VB
    پاسخ: 8
    آخرین پست: شنبه 28 خرداد 1390, 11:12 صبح
  2. پاسخ: 9
    آخرین پست: یک شنبه 01 خرداد 1390, 19:11 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •