لماذا نكتب sizeof(x) / sizeof(x[0]) بدلاً من مجرد كتابة sizeof(x) لتحديد حجم المصفوفة في C++


كيف يقوم عامل sizeof() بحساب حجم المصفوفة

ما حاولت:

لقد كتبت sizeof(x) لحساب حجم المصفوفة ولكني لم أحصل على الناتج المتوقع.

الحل 1

sizeof تُرجع عدد البايتات التي تستخدمها المعلمة: بالنسبة للمصفوفة، يتم ضرب حجم كل عنصر في عدد العناصر.

جرب هذا:

ج
#include <stdio.h>

int main()
{
    int arr[10];
    printf("%lu:%lu\n", sizeof(arr), sizeof(arr[0]));

    return 0;
}

وستحصل على النتيجة “40:4”: يستخدم إجمالي المصفوفة 40 بايت من الذاكرة، ويستخدم كل عنصر من العناصر العشرة في المصفوفة 4 بايت.

الحل 2

إضافة صغيرة: التعبير الذي كتبته،

ج
sizeof( x ) / sizeof( x[0] )

يستخدم لحساب عدد العناصر في المصفوفة وهذا هو نفس ما _countof الماكرو يفعل في VisualStudio C++.

تلخيص التعبيرات الثلاثة ونتائجها int x[8] :

sizeof(x)               size in bytes of x             : 32
sizeof(x[0])            size in bytes of one item of x : 4
sizeof(x)/sizeof(x[0])  number of items in x           : 8

الحل 3

من الأفضل أن تسأل نفسك لماذا تستخدم مصفوفة C بدلاً من الحاوية في C++. يمكنك استخدام التابع size()‎ على الحاويات والحصول على الحجم المطلوب، والذي يمكنك أيضًا ضبطه في وقت التشغيل. هناك أيضًا العديد من المزايا الأخرى لاستخدام إمكانيات C++.

コメント

タイトルとURLをコピーしました