PDA

View Full Version : سوال در مورد pointer ها



fshb_ 1370
شنبه 23 مرداد 1389, 14:58 عصر
سلام
تو این برنامه وقتی 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;

}

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

PC2st
شنبه 23 مرداد 1389, 15:57 عصر
دقیقا همانطور که BeginnerProgrammer گفتند، این ۱ واحد به اندازه نوع یک خانه در حافظه به جلو می‌رود، یعنی:

p3 = p3 + 1;معادل است با:

p3 = (double*)(*(unsigned int*)&p3 + sizeof(*p3));