الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تغير فى حجم Array

مغلق
بدأه haosman في 1 مارس 2006 · 6 رد · 602 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الأعزاء

اسمحو لى بالإنضمام لهذه المجموعة بسؤال صغير

الحمد لله انا ليا خبرة كويسة بالعمل بلغة C# ولكنى وجدت نفسى فى حاجة ملحة لتعلم الـ C++، وكما قرأت ان البداية تكون صحيحة بتعلم لغة الـ C البداية، والحمد لله انا مستمتع بهذه اللغة القوية، ولو فى أى ملاحظات على طريقة التعلم برجاء التكرم بالتعليق.

فى بس حاجة صغيرة كنت عايز اسأل عنها وأعرف أية المشكلة بالظبط

int line[10];
char words[10];

int main()
{

   printf("The size fo the numbers is %d and the size of the string is %d\n",sizeof(line),sizeof(words));    
	return 0;
}

فى الكود الموضح لية حجم الـ Array مختلف من الـ int عنه فى الـ char رغم ان الحجم فى الكود واحد

وشكرا.

#2

الإجابة سهلة

المصفوفة الأولى تحتوي على 10 عناصر من النوع int

و حجم الint هو 4 بايتات

لذا الحجم الكلي لlines = 4 * 10 = 40

بينما المصفوفة الثانية تحتوي على 10 عناصر من char و حجم الchar هو 1 بايت فقط

لذا فالحجم الكلي لwords = 10 * 1 = 10

#3

المتغير الواحد من النوع int حجمه 2 بايت

المتغير الواحد من نوع char حجمة 1 بايت

لهذا ف 10 متغيرات من النوع int سيعطي حجم 20 بايت (المصفوفة)

بينما 10 متغيرات من نوع char سيعطي حجم 10 بايت (المصفوفة)

لتصل لتيجة أصح قسم الناتج على حجم خلية واحدة من نفس النوع هكذا :

sizeof(line)/sizeof(line[0]);

ملاحظة : لم أرى ردك أخ أسامة .... ردينا في نفس اللحظة ... عذراً...

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 1 مارس 2006 في 13:38

#4

العفو أريد فقط أن أوضح شيء بسيط

كلام الأخ إسماعيل عن حجم الint صحيح في حالة المعالجات 16 بيت حيث يكون حجم الint يساوي 2 بايت و هذا غالبا ما يقصده

و لكن في المعالجات الحديثة ال32 بيت فإن حجم الint هو 4 بايت

فالنتيجة غالبا تعتمد على حسب نوع المعالج و المترجم الذي تستخدمه فهناك أجهزة قد يصل حجم الint فيها ل1 بايت فقط

#5

عذرا هل السؤال في لغة السي بلس ولا في لغة السي؟؟؟

لاني ما عمري شفت مثل هالSTATEMENT في لغة السي بلس

#6

حيدرة:

لا يوجد شيء غريب في التركيب اللغوي!

على كلّ هذا البرنامج هو سي، ويعمل في سي++..

عادة لا سيستعملون printf في سي++ لأنها أستبدلت ب cout الداعمة لمبدأ OOP ..

يمكن هذا الاشكال.

#7

كما قال الإخوة ..

و للزيادة فقط, اقول ان sizeof تعطي الحجم بالبايتات .. و ليس عدد العناصر! لان sizeof يمكن استخدامها على أي شيء و ليس فقط المصفوفات.

ولكن للعلم فقط فإن sizeof ايضا يجب ان تعرف الحجم اثناء وقت الترجمة compile-time يعني لو اعطيتها مؤشر لمصفوفة ديناميكية فستعطيك حجم المؤشر فقط (4 بايت) و ليس حجم المصفوفة.

عموما يمكن هذا الكلام شوية مبكر و لكن فقط خليه في بالك.

هذا الموضوع مغلق.

مواضيع مشابهة