ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 15
  1. #1
    2014/11/07
    128
    1

    چرا اشاره گر ؟

    سلام به همه اساتيد
    آقا يه سوال دارم اگه بتونيد جواب بديد واقعا خدمت بزرگي بهم کرديد

    ببينيد من با زبان c برنامه مينويسم (در سطح آماتوري) و کتاب جعفر نژادو خوندم و يه سري پي دي افو ......
    راستشو بخايد سوالم در مورد اشاره گر هاست . خودم بلدم از شون استفاده کنم و کليتشو ميدونم چيه ولي اينکه چرا ازش استفاده ميشه رو نميدونم
    يعني فکر ميکنم کاري رو که با اشاره گر ميشه انجام داد بدون اشاره گرم ميشه انجامش داد .درسته يا غلط ؟ اگه درسته پس چرا اصلا اشاره گر درست شده و انقدر ازشون استفاده ميشه و اگه غلطه چرا؟اگه بتونيد تو غالب يه مثال کوچيک جواب بديد خيلي :wow: :wow: :wow: ميشم

    اگه متوجه سوالم نشديد بگيد يه جور ديگه بپرسم
    *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
    ناپلئون بناپارت
  2. #2
    2011/03/18
    تهران
    574
    3

    پاسخ : چرا اشاره گر ؟

    تقريبا خيلي از کارايي که با اشاره گر ميشه انجام داد رو با آرايه هم ميشه انجام داد، ولي برا کامپايلر کامپايل کردن اشاره گره ساده تر از آرايه هست و کد بهينه تري رو توليد ميکنه و به همين دليل کامپايلر ها هم معمولا ابتداي کامپايل تمام آرايه هارو به اشاره گر تبديل ميکنن
    به جز اين، يه کارايي رو تو سي يا سي پلاس پلاس فقط ميشه با اشاره گر انجام داد، مثلا: اگه بخواي از يه تابع چند تا خروجي رو با هم برگردوني!
    در کل اگر به استفاده از اشاره گر عادت کني اونموقع هم حجم کدت پايين تر مياد و هم کد سريع تر و بهينه تري داري.
    ;()((void (*)(void))0x0000))
  3. #3
    2014/11/07
    128
    1

    پاسخ : چرا اشاره گر ؟

    ممنون
    خوب مثلا در رابطه با همين که ميگيد چنتا خروجي
    آيا نميشه مثلا چنتا متغير عمومي تعريف کردو مقادير دلخواه رو بريزيم توش و تو توابع ديگه ازش استفاده کرد؟

    يا مثلا چرا توابع رو با ارجاع فراخواني ميکنن ؟ مگه نميشه همين طوري معمولي فراخواني کرد؟ چه فرقي بينشون هست؟
    :question:
    *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
    ناپلئون بناپارت
  4. #4
    2012/07/21
    834
    23

    پاسخ : چرا اشاره گر ؟

    ببین دوست عزیز، به فرض کدهایی که شما نوشتی در حد 2000 خط به بالا نبوده. من خودم بیشتر از 10000 خط کد C ننوشتم تا حالا... فرض کن الآن سال 1990 هست و یه پروژه نرم افزاری بزرگ مثل نسخه اولیه ویندوز در حال توسعه ست. صدها برنامه نویس در حال کار کردن روی این پروژه هستند. به نظر شما معقوله که همۀ متغیرها رو به صورت عمومی توی فایل هدر globals.h تعریف کنیم و بدیم دستِ همۀ برنامه نویس ها؟!
    مسلماً الآنه روش های برنامه نویسی شیءگرا خیلی از این مشکلات رو حذف کرده. ولی بازم خواناییِ کد خیلی مهمه. توسعه پذیری و مقیاس پذیریِ کد مهمه. همیشه که کد نویسی برای میکروکنترلرِ AVR نیست که دوست عزیز.
    برای همین، استفاده از توابع می تونه بسیار مؤثر باشه.
    یکی از مشکلات زبان C همینه که بیشتر از یه دونه خروجی نمی تونه ایجاد کنه. اگه بخوایم 2 تا خروجی توی تابع داشته باشیم بیچاره می شیم. یا باید struct درست کنیم، یا به صورت اشاره گر بدیمش توی آرگومان ورودی.
    البتــــــه، یکی از محاسنِ بزرگ زبان C استفاده از اشاره گرها و تبدیل نوعِ اشاره گرهاست. مثلاً من یه بسته داده از پورت سریال دارم که یه سری بایت پشتِ سر هم توش هست. انواع داده های مختلف هم داره از کاراکتر و عدد صحیح و float و آرایه و غیره همه چیز توش هست. من الآن همۀ این ها رو به صورت یه رشته بایتی پشتِ سر هم دارم و می خوام محتواش رو استخراج کنم. نگاه کن:
    [code=C]
    data_struct UpdateFrame(unsigned char * Data)
    {
    float * p_float;
    unsigned short * p_uint16;
    unsigned char * p_uint8;
    data_struct out_str;

    p_float = (float *) &Data[0];
    out_str.azT = *p_float++;
    out_str.elT = *p_float++;
    out_str.rt = *p_float++;
    out_str.Vt = *p_float++;
    out_str.az = *p_float++;
    out_str.el = *p_float++;
    out_str.lt = *p_float++;
    out_str.h = *p_float++;
    out_str.ep = *p_float++;
    out_str.bt = *p_float++;

    p_uint16 = (unsigned short *) p_float;
    out_str.wx = *p_uint16++;
    out_str.wy = *p_uint16++;
    out_str.dx = *p_uint16++;
    out_str.dy = *p_uint16++;

    p_float = (float *) p_uint16;
    out_str.P1 = *p_float++;
    out_str.P2 = *p_float++;
    out_str.Dl_x = *p_float++;

    p_uint8 = (unsigned char *) p_float;
    out_str.cntr = *p_uint8++;

    out_str.mode = *p_uint8++;
    out_str.com = *p_uint8++;

    return out_str;
    }[/code]

    توی این کد از تغییر نوع اشاره گر ها استفاده خوبی شده.

    موفق باشید
    بیایید با Google آشتی کنیم!
  5. #5
    2014/11/07
    128
    1

    پاسخ : چرا اشاره گر ؟

    گرفتم دم شما گرم
    *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
    ناپلئون بناپارت
  6. #6
    2012/08/23
    70
    0

    پاسخ : چرا اشاره گر ؟

    مهم ترين يا شايد اصلي ترين دليل وجود اشاره گر دسترسي به حافظه است ،
    همين ويزگي هست که زبان c تبديل به قوي ترين زبان برنامه نويسي براي ميکروکنترلر ها و ... ميکنه
    اگر هدر فايل هاي هر نوع ميکروکنترلر يا حتي SOC ها رو نگاه کنيد مشاهده خواهيد کرد که به چه شکل براي دسترسي به فضاي memory map يا همون ناحيه IO از اشاره گر ها استفاده شده است

    ------------------------------
    توصيه دوستانه اگر ميخواهيد با c براي ميکروکنترلر کد بنويسد سعي کنيد مبحث اشاره گر ها رو به صورت کاربردي خوب درک کنيد
  7. #7
    2010/10/11
    65
    0

    پاسخ : چرا اشاره گر ؟

    نقل قول نوشته اصلی توسط محمد رستمی
    ببین دوست عزیز، به فرض کدهایی که شما نوشتی در حد 2000 خط به بالا نبوده. من خودم بیشتر از 10000 خط کد C ننوشتم تا حالا... فرض کن الآن سال 1990 هست و یه پروژه نرم افزاری بزرگ مثل نسخه اولیه ویندوز در حال توسعه ست. صدها برنامه نویس در حال کار کردن روی این پروژه هستند. به نظر شما معقوله که همۀ متغیرها رو به صورت عمومی توی فایل هدر globals.h تعریف کنیم و بدیم دستِ همۀ برنامه نویس ها؟!
    مسلماً الآنه روش های برنامه نویسی شیءگرا خیلی از این مشکلات رو حذف کرده. ولی بازم خواناییِ کد خیلی مهمه. توسعه پذیری و مقیاس پذیریِ کد مهمه. همیشه که کد نویسی برای میکروکنترلرِ AVR نیست که دوست عزیز.
    برای همین، استفاده از توابع می تونه بسیار مؤثر باشه.
    یکی از مشکلات زبان C همینه که بیشتر از یه دونه خروجی نمی تونه ایجاد کنه. اگه بخوایم 2 تا خروجی توی تابع داشته باشیم بیچاره می شیم. یا باید struct درست کنیم، یا به صورت اشاره گر بدیمش توی آرگومان ورودی.
    البتــــــه، یکی از محاسنِ بزرگ زبان C استفاده از اشاره گرها و تبدیل نوعِ اشاره گرهاست. مثلاً من یه بسته داده از پورت سریال دارم که یه سری بایت پشتِ سر هم توش هست. انواع داده های مختلف هم داره از کاراکتر و عدد صحیح و float و آرایه و غیره همه چیز توش هست. من الآن همۀ این ها رو به صورت یه رشته بایتی پشتِ سر هم دارم و می خوام محتواش رو استخراج کنم. نگاه کن:
    [code=C]
    data_struct UpdateFrame(unsigned char * Data)
    {
    float * p_float;
    unsigned short * p_uint16;
    unsigned char * p_uint8;
    data_struct out_str;

    p_float = (float *) &Data[0];
    out_str.azT = *p_float++;
    out_str.elT = *p_float++;
    out_str.rt = *p_float++;
    out_str.Vt = *p_float++;
    out_str.az = *p_float++;
    out_str.el = *p_float++;
    out_str.lt = *p_float++;
    out_str.h = *p_float++;
    out_str.ep = *p_float++;
    out_str.bt = *p_float++;

    p_uint16 = (unsigned short *) p_float;
    out_str.wx = *p_uint16++;
    out_str.wy = *p_uint16++;
    out_str.dx = *p_uint16++;
    out_str.dy = *p_uint16++;

    p_float = (float *) p_uint16;
    out_str.P1 = *p_float++;
    out_str.P2 = *p_float++;
    out_str.Dl_x = *p_float++;

    p_uint8 = (unsigned char *) p_float;
    out_str.cntr = *p_uint8++;

    out_str.mode = *p_uint8++;
    out_str.com = *p_uint8++;

    return out_str;
    }[/code]

    توی این کد از تغییر نوع اشاره گر ها استفاده خوبی شده.

    موفق باشید
    خیلی ممنون از مطلبی که گفتید،اگر ممکن هست یک توضیحی در مورد کدی که بهش اشاره کردید بدید لطفا

    ضمنا اگر منبع خوبی برای این سبک برنامه نویسی با C&C++ میشناسید معرفی کنید، متاسفانه من هرچی مطلب مورد برنامه نویسی پیدا میکنم ، ابتدایی و تکراریه
  8. #8
    2007/03/15
    تبريز
    2,689
    133

    پاسخ : چرا اشاره گر ؟

    یک متغیر یک یا دو یا حداکثر 4-5 بایت از حافظه رو مشخص میکنه . ولی یک اشاره گر محل شروع یک قسمت از حافظه رو مشخص میکنه .
    حالا ببین اینها میتونن جای هم استفاده بشن ؟ حالا در حقیقت آرایه ها و رشته ها و کلاس ها و استراکچر ها یک اشاره گر های کنترل شده هستند.

    معمولا توصیه میشه با اشاره گر ها کار نکنید. علتش نوع تخریب آمیز بودن کار برد اشاره گر هاست. یک متغیر یک حوزه دید داره . یعنی دیگه حداکثر حوزه یک متغیر میتونه سراسری پابلیک باشه . که فقط به متحویات داخل اون پروسس میتونه دست رسی داشته باشه . ولی اشاره گر ها عین یک لودر میتونه مدیرت حافظه سیستم عامل رو با خاک یکسان کنه.
    تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
    داشتن عقله زيادتر از دیگر آدم ها است
  9. #9
    2014/08/28
    210
    4

    پاسخ : چرا اشاره گر ؟

    نقل قول نوشته اصلی توسط محمد رستمي
    البتــــــه، يکي از محاسنِ بزرگ زبان C استفاده از اشاره گرها و تبديل نوعِ اشاره گرهاست. مثلاً من يه بسته داده از پورت سريال دارم که يه سري بايت پشتِ سر هم توش هست. انواع داده هاي مختلف هم داره از کاراکتر و عدد صحيح و float و آرايه و غيره همه چيز توش هست. من الآن همۀ اين ها رو به صورت يه رشته بايتي پشتِ سر هم دارم و مي خوام محتواش رو استخراج کنم. نگاه کن:
    [code=C]
    data_struct UpdateFrame(unsigned char * Data)
    {
    float * p_float;
    unsigned short * p_uint16;
    unsigned char * p_uint8;
    data_struct out_str;

    p_float = (float *) &Data[0];
    out_str.azT = *p_float++;
    out_str.elT = *p_float++;
    out_str.rt = *p_float++;
    out_str.Vt = *p_float++;
    out_str.az = *p_float++;
    out_str.el = *p_float++;
    out_str.lt = *p_float++;
    out_str.h = *p_float++;
    out_str.ep = *p_float++;
    out_str.bt = *p_float++;

    p_uint16 = (unsigned short *) p_float;
    out_str.wx = *p_uint16++;
    out_str.wy = *p_uint16++;
    out_str.dx = *p_uint16++;
    out_str.dy = *p_uint16++;

    p_float = (float *) p_uint16;
    out_str.P1 = *p_float++;
    out_str.P2 = *p_float++;
    out_str.Dl_x = *p_float++;

    p_uint8 = (unsigned char *) p_float;
    out_str.cntr = *p_uint8++;

    out_str.mode = *p_uint8++;
    out_str.com = *p_uint8++;

    return out_str;
    }[/code]

    توي اين کد از تغيير نوع اشاره گر ها استفاده خوبي شده.

    موفق باشيد
    سلام
    ميشه يکم ساده تر درمورد تبديل نوع اشاره گرها توضيح بدين و اينکه کاربردش چيه
    ممنون
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!
  10. #10
    2012/07/21
    834
    23

    پاسخ : چرا اشاره گر ؟

    نقل قول نوشته اصلی توسط sejil
    سلام
    ميشه يکم ساده تر درمورد تبديل نوع اشاره گرها توضيح بدين و اينکه کاربردش چيه
    ممنون
    شرمنده م. نمی شه...
    بیایید با Google آشتی کنیم!
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 15

موضوعات مشابه

  1. پاسخ: 2
    آخرين نوشته: 2016/03/13, 12:49
  2. اشاره گر ->
    توسط FRA در انجمن ATMEL
    پاسخ: 3
    آخرين نوشته: 2015/04/13, 01:11
  3. اشاره گر ها
    توسط IRT در انجمن برنامه نويسي و اينترفيس
    پاسخ: 1
    آخرين نوشته: 2014/12/13, 01:41
  4. اشاره گر
    توسط saeed mns در انجمن میکروکنترلرهای PIC
    پاسخ: 3
    آخرين نوشته: 2013/07/11, 15:29
  5. اشاره گرها
    توسط رضا حاجي زاده در انجمن C , C++ , C#
    پاسخ: 3
    آخرين نوشته: 2007/11/09, 17:22

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

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