إم بعد دورة الكلية عن أنظمة التشغيل وكانوا يتعلمون كيفية التحويل من ثنائي إلى عشري، عشري إلى عشري، وما إلى ذلك، واليوم علمنا فقط كيف يتم تخزينها سيغنونزيغند أرقام في الذاكرة باستخدام تكملة توس (لدينا زوجين من التمارين للقيام على الورق، وأود أن أكون قادرا على التحقق من إجابتي قبل تقديم عملي إلى المعلم، وكتبت برنامج C للتدريبات القليلة الأولى ولكن الآن إم عالقة على كيف يمكنني التحقق من جوابي مع المشكلة التالية: ونحن تحتاج إلى إظهار التمثيل الثنائي في الذاكرة من b و c. إيف فعلت ذلك على الورق ويعطيني النتائج التالية (كل التمثيل الثنائي في الذاكرة من الأرقام بعد تكملة اثنين): 00111010 (لها شار، (1 بايت) b 00001000 (ب، 1 بايت) c 11111110 11000101 (قصيرة، حتى 2 بايت) هل هناك طريقة للتحقق من إجابتي هل هناك طريقة قياسية في C لإظهار التمثيل الثنائي في الذاكرة عدد، أو لا بد لي من رمز كل خطوة ميس قزم (حساب تكملة الثنائي ومن ثم تحويل إلى ثنائي) وأنا أعلم أن الأخير لن يستغرق وقتا طويلا ولكن إم غريبة كما لو كان هناك طريقة قياسية للقيام بذلك. C سلاسل (صفائف مقابل نقاط) قبل فئة السلسلة، تم تنفيذ فكرة السلسلة باستخدام مجموعة من الأحرف. على سبيل المثال، هنا سلسلة: ما تبدو هذه المصفوفة في الذاكرة ما يلي: حيث تكون بداية المصفوفة في موقع ما في ذاكرة الكمبيوتر، على سبيل المثال، الموقع 1000. ملاحظة: لا تنسى أن هناك حاجة إلى حرف واحد لتخزين حرف نول (0)، مما يشير إلى نهاية السلسلة. يمكن أن يحتوي صفيف الأحرف على أحرف أكثر من السلسلة المجردة التي يتم الاحتفاظ بها، كما يلي: إعطاء صفيف يشبه: (حيث لا يتم استخدام 3 عناصر صفيف حاليا). وبما أن هذه السلاسل هي حقا صفائف فقط، يمكننا الوصول إلى كل حرف في المصفوفة باستخدام تدوين الخط، كما في: الذي يطبع الحرف الثالث، n. عيب إنشاء سلاسل باستخدام بناء جملة مصفوفة الأحرف هو أنه يجب عليك أن تقول مسبقا عدد الأحرف التي قد تعقدها المصفوفة. على سبيل المثال، في تعريفات الصفيف التالية، نوضح عدد الأحرف (سواء ضمنيا أو صراحة) التي سيتم تخصيصها للمصفوفة. وبالتالي، يجب تحديد الحد الأقصى لعدد الأحرف التي سوف تحتاج إلى تخزينها في مصفوفة. ويسمى هذا النوع من تخصيص الصفيف، حيث يتم تحديد حجم المصفوفة في وقت تجميع، تعيين ثابت. سلاسل كمؤشرات: وهناك طريقة أخرى للوصول إلى جزء متجاورة من الذاكرة، بدلا من مصفوفة، هو مع مؤشر. منذ نتحدث عن السلاسل. والتي تتكون من الشخصيات. وكذلك استخدام المؤشرات إلى الأحرف. أو بالأحرى، شار s. ومع ذلك، مؤشرات فقط عقد عنوان، فإنها لا يمكن أن تعقد كافة الأحرف في مصفوفة الأحرف. وهذا يعني أنه عندما نستخدم شار لتتبع سلسلة، يجب أن توجد مجموعة الأحرف التي تحتوي على السلسلة بالفعل (بعد أن تم تخصيصها بشكل ثابت أو ديناميكيا). في ما يلي كيفية استخدام مؤشر الأحرف لتتبع سلسلة. سيكون لدينا شيء مثل ما يلي في الذاكرة (على سبيل المثال نفترض أن تسمية الصفيف بدأت في عنوان الذاكرة 2000. الخ): ملاحظة: منذ تعييننا عنوان صفيف من الأحرف. يجب أن يكون المؤشر مؤشر حرف - يجب أن تتطابق الأنواع. أيضا، لتعيين عنوان مصفوفة لمؤشر، نحن لا نستخدم عنوان عامل (أمبير) لأن اسم مصفوفة (مثل تسمية) يتصرف مثل عنوان هذه المصفوفة في هذا السياق. الآن، يمكننا استخدام لابيلبتر تماما مثل تسمية اسم الصفيف. لذلك، يمكننا الوصول إلى الحرف الثالث في السلسلة مع: من المهم أن نتذكر أن السبب الوحيد التسمية المؤشربتر يسمح لنا بالوصول إلى صفيف التسمية هو لأننا جعلت لابيلبتر نقطة إلى ذلك. لنفترض، نقوم بما يلي: الآن، لم يعد التسمية المؤشربتر تشير إلى التسمية. ولكن الآن إلى label2 على النحو التالي: لذلك، الآن عندما كنا سوبسكريبت باستخدام لابيلبر. نحن نشير إلى الأحرف في التسمية 2. ما يلي: يطبع من r. الحرف الثالث في مصفوفة التسمية 2. تماما كما يمكننا تمرير أنواع أخرى من المصفوفات إلى وظائف، يمكننا أن نفعل ذلك مع السلاسل. فيما يلي تعريف الدالة التي تقوم بطباعة تسمية ومكالمة لهذه الدالة: بما أن التسمية عبارة عن مصفوفة أحرف، وتتوقع الدالة برينتلابيل () صفيف أحرف، فإن ما سبق يكون منطقيا. ومع ذلك، إذا كان لدينا مؤشر إلى تسمية صفيف الأحرف. كما في: ثم يمكننا أيضا تمرير المؤشر إلى وظيفة، كما في: النتائج هي نفسها. لماذا الإجابة: عندما نعلن مصفوفة كمعلمة إلى وظيفة، ونحن حقا مجرد الحصول على مؤشر. بالإضافة إلى ذلك، يتم دائما تمرير المصفوفات تلقائيا بالرجوع (على سبيل المثال، يتم تمرير المؤشر). لذلك، يمكن كتابة برينتلابيل () بطريقتين: ليس هناك فرق لأنه في كلتا الحالتين المعلمة هي حقا مؤشر. ملاحظة: في C، يوجد اختلاف في استعمال الأقواس () عند إعلان متغير صفيف عالمي أو ثابت أو محلي مقابل استعمال هذه المصفوفة للتدوين لمعلمة الدالة. مع معلمة إلى وظيفة، تحصل دائما على مؤشر حتى إذا كنت تستخدم تدوين الصفيف. وهذا ينطبق على جميع أنواع المصفوفات. منذ بعض الأحيان كنت لا تعرف كيف كبيرة سلسلة حتى وقت التشغيل، قد تضطر إلى اللجوء إلى تخصيص ديناميكية. وفيما يلي مثال لتخصيص مساحة حيوي لسلسلة في وقت التشغيل: في الأساس، لقد طلبنا من جديد (مشغل التخصيص) أن نعطينا مساحة كافية لمصفوفة من الحجم المطلوب. المشغل الجديد يتطلب نوع من العناصر (هنا، شار) وعدد العناصر اللازمة (نظرا لحجم صفيف بين و). لاحظ أنه على عكس التخصيص الثابت، على سبيل المثال. يمكن أن يكون حجم المتغير (عند استخدام جديد للتخصيص). نحن تتبع المسار ديناميكيا المخصصة مع مؤشر (على سبيل المثال قيمة العودة من الدعوة إلى جديد يتم تخزينها في ستر). ثم يمكننا استخدام هذا المؤشر كما استخدمنا مؤشرات إلى صفائف مخصصة إحصائيا أعلاه (أي أننا الوصول إلى الأحرف الفردية مع ستري، تمرير السلسلة إلى وظيفة، وما إلى ذلك). وأخيرا، لاحظ أنه عندما نقوم به باستخدام السلسلة، يجب علينا إلغاء تخصيصه. ملاحظة: لاحظ استخدام عند استخدام حذف ديالوكيت مصفوفة. هنا، ونحن ديالوكات السلسلة في نفس الوظيفة، ولكن في بعض الحالات قد لا تزال بحاجة إليها بعد سوميفونك () ينتهي، لذلك ديالوكيت ذلك في وقت لاحق. تذكر، يجب أن نحافظ على مؤشر إلى بداية السلسلة لأن هذا ما يتم استخدامه للوصول إلى السلسلة وإلغاء تخصيصه. صفائف مقابل نقاط: كما نرى الآن، هناك أكثر من طريقة واحدة لعرض سلسلة. قد يتم الوصول إلى سلسلة في مصفوفة مخصصة بشكل ثابت، يمكن الوصول إليها عبر مؤشر إلى مصفوفة مخصصة بشكل ثابت، أو ربما عبر مؤشر إلى مصفوفة مخصصة ديناميكيا. بو كاس كس - C سترينغس (صفائف مقابل نقاط) كوبيرايت كوبي 1993-2000 بي روبرت I. بيتس لتريب أت بو دوت إدوجت. جميع الحقوق محفوظة. هناك ليس محدد تحويل ثنائي في غليبك عادة. من الممكن إضافة أنواع تحويل مخصصة إلى عائلة برينتف () من الوظائف في غليبك. راجع ريجيسترينتفونكتيون للحصول على التفاصيل. يمكنك إضافة تحويل ب مخصص للاستخدام الخاص بك، إذا كان يبسط رمز التطبيق لإتاحته. فيما يلي مثال على كيفية تنفيذ تنسيقات برينتف مخصصة في غليبك. أيضا، ما you39re نتحدث عن w. r.t. والتعامل مع نتائج متعددة بالتتابع ليس إعادة التكرار في حد ذاته، وإنما ببساطة تداعيات استخدام ما يصل إلى كائن عالمي لتخزين النتيجة في. لا يتم إعادة إدخال وظيفة. في C السليم، أو على الأقل تستخدم على نطاق واسع، لغة للتعامل مع الوظائف التي تخزن نتائجها في كائن عالمي هو نسخ تلك النتائج فور الحصول عليها. وهذا له ميزة كبيرة أنه إذا كانت هناك حاجة إلى نتيجة واحدة فقط في وقت واحد ثم لا يوجد تخصيص إضافي ضروري. نداش غريغ A. وودز نوف 27 12 في 0:51 هنا we39re سوف تضطر إلى عدم الموافقة. أستطيع أن أرى كيف أن إضافة رمز واحد المعالج غير مزعجة يأتي في أي مكان بالقرب من ضرر الحد من حالات الاستخدام بشدة، مما يجعل واجهة معرضة للخطأ، وحفظ التخزين الدائم لمدة البرنامج لقيمة مؤقتة، وتوليد رمز أسوأ على معظم المنصات الحديثة . نداش R .. نوف 27 12 في 1:53 عائلة برينتف () قادرة فقط على الطباعة في القاعدة 8 و 10 و 16 باستخدام المحددات القياسية مباشرة. اقتراح إنشاء دالة تقوم بتحويل الرقم إلى سلسلة لكل رموز احتياجات معينة. جميع الإجابات الأخرى حتى الآن لديها واحد على الأقل من هذه القيود. استخدام الذاكرة الثابتة لعازلة العودة. هذا يحد من عدد المرات التي يمكن استخدام الدالة كوسيطة ل برينتف (). تخصيص الذاكرة التي تتطلب رمز الدعوة لتحرير مؤشرات. تتطلب رمز الاستدعاء لتوفير صريح مناسبة عازلة. اتصل برينتف () مباشرة. هذا يلزم وظيفة جديدة ل فبرينتف (). sprintf (). vsprintf (). الخ استخدام مجموعة منخفضة من الأعداد الصحيحة. وفيما يلي أي من القيود المذكورة أعلاه. أنها لا تتطلب C99 أو في وقت لاحق واستخدام ق. ويستخدم مجمع الحرفي لتوفير مساحة عازلة. ليس لديه مشكلة مع مكالمات متعددة في برينتف ().
No comments:
Post a Comment