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

نام تاپیک: سوال در مورد pointer ها

  1. #1

    سوال در مورد pointer ها

    سلام
    تو این برنامه وقتی p3=p3+1 میشه، element بعدی آرایه رو نشون میده، مگه double، 8 بایت از حافظه رو اشغال نمیکنه؟ پس باید نوشته بشه p3=p3+8 تا pointer به element بعدی اشاره کنه. ولی مورد اول درسته، چرا؟
    #include <iostream>

    using namespace std;

    int main()

    {

    double * p3 = new double [3]; // space for 3 doubles

    p3[0] = 0.2; // treat p3 like an array name

    p3[1] = 0.5;

    p3[2] = 0.8;

    cout << "p3[1] is " << p3[1] << ".\n";

    p3 = p3 + 1; // increment the pointer

    cout << "Now p3[0] is " << p3[0] << " and ";

    cout << "p3[1] is " << p3[1] << ".\n";

    p3 = p3 - 1; // point back to beginning

    delete [] p3; // free the memory

    return 0;

    }

  2. #2
    کاربر دائمی آواتار BeginnerProgrammer
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    کرمانشاه
    پست
    232

    نقل قول: سوال در مورد pointer ها

    سلام
    دستوری که شما مینویسین p3=p3+1 خود کامپایلر تشخیص میده که به ازای این یک واحدی که شما در واقع دارین به آدرس p3 اضافه میکنید چند بایت از حافظه باید جلو بره تا به مکان بعدی آرایه برسه. اگه شما به جای چاپ محتوا بیاین آدرس خونه ها رو چاپ کنید مشاهده میکنید که با اضافه کردن این یک واحد 8 بایت به آدرس خونه ی مورد نظر اضافه شده.

  3. #3
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491

    نقل قول: سوال در مورد pointer ها

    دقیقا همانطور که BeginnerProgrammer گفتند، این ۱ واحد به اندازه نوع یک خانه در حافظه به جلو می‌رود، یعنی:
    p3 = p3 + 1;
    معادل است با:
    p3 = (double*)(*(unsigned int*)&p3 + sizeof(*p3));

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

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