PDA

View Full Version : سوال: چرا با جابجا کردن ارور برطرف میشود؟



irpersian20
پنج شنبه 28 شهریور 1392, 02:40 صبح
#include <iostream.h>
int main ()
{
char *p;
char *str="Hello";
p=str;
cout<<*p<<endl;
cout<<" string= "<<str;
return 0;
}



#include <iostream.h>
int main ()
{
char *p;
char *str="Hello";
*p=str;
cout<<*p<<endl;
cout<<" string= "<<str;
return 0;
}




#include <iostream.h>
int main ()
{

char *str="Hello";
char *p=str;

cout<<*p<<endl;
cout<<" string= "<<str;
return 0;
}


چرا در قطعه کد دوم وقتی *p را تعریف نمیکنیم و همان موقع انتصاب تعریفش میکنیم ارور نداریم اما در مورد دوم ارور دار میشه اگر در خط اول تعریفش کنیم؟

چرا در مورد اول ارور داریم و دوم نه؟

rezaricky
پنج شنبه 28 شهریور 1392, 14:01 عصر
سلام
باید اینطوری بنویسی
char *p;
char *str="Hello";
p=str;

irpersian20
پنج شنبه 28 شهریور 1392, 14:11 عصر
سلام
درسته . دلیل رو میخواستم که چرا این طوری هست. تفاوت ها در 3 نمونه و اون موردی که در پست اول مطرح کردم.

rezaricky
پنج شنبه 28 شهریور 1392, 14:20 عصر
در این کد :*p=str;
شما داری به کامپایلر میگی که مکانی رو که متغیر p به اونجا اشاره میکنه رو برابر str قرار بده که اشتباهه چون p به جایی اشاره نمیکنه.
ولی در این کد p=str; به کامپیلر میگی خود p رو برابر str قرار بده .

این کد char *p=str; هم معادل char *p;
p=str; است.

irpersian20
پنج شنبه 28 شهریور 1392, 14:49 عصر
سلام دوست عزیز
char *p; char *str="Hello";
p=str;

در قطعه کد بالا ما چی میگیم؟ یک اشاره گر تعریف کردیم که به هیچ جا اشاره نمی کنه. char *p
بعد اومدیم یک اشاره گر تعریف کردیم که رشته Hello میریزیم داخلش درسته؟
سوال اول: این قسمت وقتی یک اشاره گر تعریف میکنیم .به همان مقدار رشته کامپایلر دونه به دونه میاد حافظه تخصیص میده میره جلو تا رشته تمام بشه درسته؟
بعد این
p=str
اینجا یعنی چی؟ رشته str رو چطوری با = میریزه داخل p که از نوع اشاره گر کارکتر هست و به جایی اشاره نمیکنه؟ الان p خالی اسمش چی هست و چه خاصیتی داره که میتونه خانه حافظه قرض بگیره تا رشته رو جا بده داخلش؟

rezaricky
پنج شنبه 28 شهریور 1392, 15:06 عصر
توی این کد char *str="Hello"; در واقع کامپایلر میاد رشته hello رو یک جایی از حافظه قرار میده و ادرس اون قسمت رو در str قرار میده .
در این کد p=str; هم در واقع مقدار درون str که ادرس هست توی متغیر p قرار میگیره .
در واقع الان هر دو متغیر به یک نقطه از حافظه اشاره میکنن که رشته hello هم در اونجا قرار داره .
شکل رو ببینید خیلی سریع کشیدم .شاید بتونه کمکت کنه.
http://i.cubeupload.com/RMYn1F.png