PDA

نسخه کامل مشاهده نسخه کامل : مشكل با pointer



p d
21-05-2010, 11:05
سلام خدمت دوستان.
وقتي من از اشاره گر ها استفاده ميكنم حس ميكنم يه جورايي كامپايلر كم مياره (:31:)
انگار پر از اشكال و باگ هستش...(البته نشنيده بگيريد)
_____

كد زير رو ببينيد


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


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدميرسه , بهم ميخوره. دليلش رو تغريبا ميدونم ولي روش حلش رو نميدونم.
براي يك بعدي (char *name)از

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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدچي كار كنم؟؟؟
______
(رويه چندتا كامپايلر امتحان كردم اكثرا به اشكال خوردن ولي يكيشون بدون مشكل اجرا كرد. چرا ؟)

femme
21-05-2010, 16:50
سلام
مشکل شما اینه که از ۲ تا ستاره استفاده کردید .هرجا ۲ تا ستاره گذاشتید یعنی یک اشاره گر تعریف کردید که به اشارگری اشاره میکنه که خود اون داره به یک آدرس حافظه اشاره میکنه

p d
21-05-2010, 22:15
:18::18::18:
يعني چي ؟



مشکل شما اینه که از ۲ تا ستاره استفاده کردید .هرجا ۲ تا ستاره گذاشتید یعنی یک اشاره گر تعریف کردید که به اشارگری اشاره میکنه که خود اون داره به یک آدرس حافظه اشاره میکنه

خوب اين ميشه همون چيزي كه من ميخوام ديگه ...
اين كه شما گفتي ميشه شبيه يه ارايه دو بعدي يعني همون چيزي كه من ميخوام...
اساتيد نظري ندارن ؟

hoax3r
22-05-2010, 08:47
سلام pd جان، کم پیدایین:31:

مشکل برنامتون اینه که برای names با new حافظه نگرفتین، و names که به جایی اشاره نمیکنه رو به اون توابع فرستادین
اونجایی که برای numbers حافظه گرفتین برای names هم باید گرفت

femme
22-05-2010, 14:51
names بايد به يك آرايه اشاره كنه تا بتونيد به عنوان يك آرايه از اون استفاده كنيد

p d
22-05-2010, 18:47
names بايد به يك آرايه اشاره كنه تا بتونيد به عنوان يك آرايه از اون استفاده كنيد

:20:
ممنون ولي اين چيزي نيست كه من ميخوام ...
________


سلام pd جان، کم پیدایین

به به ....
سلام استاد, خوبي ؟
شما هم كمتر فعاليت ميكني...
ديدم فروم بي حال شده گفتم دوباره بيايم ... به پا كنيم :31::46:
_________


مشکل برنامتون اینه که برای names با new حافظه نگرفتین، و names که به جایی اشاره نمیکنه رو به اون توابع فرستادین
اونجایی که برای numbers حافظه گرفتین برای names هم باید گرفتاره ولي اين اشاره گر به اشاره گر هست ولي numbers يه اشاره گره ...
خلاصه كه
چه جوري حافظه بگيرم ؟ مثل همون numbers يا فرق داره ؟؟

femme
22-05-2010, 21:10
سلام اين مثال براي من مفيد بود اميدوارم به شما هم كمك كنه


int **array;
array = new int*;
*array = new int;
**array = 2;
*(*array) = 3;
cout << **array;

به یک متغیر ساده انجام شده است. pointer to pointer همون طور که می بینید
خروجی اون 3 خواهد بود.
یک آرایه ی دوبعدی درست کنید. PtoP اما شما می تونید با استفاده از

int **array2;
array2 = new int*[20];
*array2 = new int[2];
array2[0][10] = 5;
cout << array2[0][10];

براتون درست کردم. P2P در این مثال براتون یک آرایه ی دوبعدی ۲ در ۲۰ با استفاده از
خروجی این مثال ۵ خواهد بود.

hoax3r
23-05-2010, 08:34
به به ....
سلام استاد, خوبي ؟
شما هم كمتر فعاليت ميكني...
ديدم فروم بي حال شده گفتم دوباره بيايم ... به پا كنيم

اینجا تبدیل شده به مرکز حل تکالیف برای خیلیا، منم برای همین اینجا زیاد نمیام ...


اره ولي اين اشاره گر به اشاره گر هست ولي numbers يه اشاره گره ...
خلاصه كه
چه جوري حافظه بگيرم ؟ مثل همون numbers يا فرق داره ؟؟

خوب names هم به هر حال یه اشاره گر هست اشارگری که به اشاره گر دیگه اشاره میکنه باید حافظه بهش داده بشه وگرنه کامپایلر حافظه ای براش رزو نمیکنه
مثالی که جناب femme دادن رو یه نگاهی بکنین این مساله رو نشون میده

در کد شما باید این دستور اضافه بشه

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

p d
23-05-2010, 12:51
اینجا تبدیل شده به مرکز حل تکالیف برای خیلیا، منم برای همین اینجا زیاد نمیام ...



ديگه اين رو نميشه كاريش كرد ...
دوستان ممنون از راهنماييهاتون...