سؤال

int main(){

    int arr[2]={30,40};
    printf("%dn",i[arr]);
    return 0;
}

لقد وجدت هذا السؤال في الفحص والحل المعطى هو 40

لكنني أعتقد أنه يجب أن يعطي خطأً لأنني غير محدد.أو ربما أفتقد شيئًا ما.من فضلك اشرح لي كيف 40 هي الإجابة الصحيحة؟

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

كلامك صحيح الكود خاطئمن المحتمل أنه خطأ مطبعي، وكان القصد إما التعريف i أو للاستخدام 1[arr].

نصائح أخرى

ربما هو خطأ، منذ ذلك الحين i غير محدد.

أيضًا، ربما يكون الهدف من التمرين هو الاستفادة من حقيقة أنه في ج, ، يمكنك كتابة v[ i ] من أجل الوصول إلى #أنا عنصر المتجه الخامس, ، أو i[ v ].

كلا النموذجين متساويان. منذ ذلك الحين v[ i ] يتم ترجمته ك *( v + i ), ، في الواقع ليس هناك أي فرق بين ذلك و *( i + v ), ، وهو ما i[ v ] مترجم ل.هذا ليس استخدامًا شائعًا، ولكنه مع ذلك صالح.

المصفوفات في لغة C، من ويكيبيديا

في هذا المثال المحدد، 1[arr] سيعود الجواب المتوقع.

أنا فقط أتساءل لماذا اختاروا 40 بدلا من 42.

أتمنى أن يساعدك هذا.

i من المفترض أن يتم إعطاؤه كـ 1، إما في الجزء المنطوق من الامتحان، أو في الجزء المفقود.كما هو مكتوب، السؤال بالطبع غير قابل للتطبيق لأنه لا يتم تجميعه.

النقطة الحقيقية من السؤال هي اختبار ما إذا كان مقدم الطلب يفهم ذلك array[index] يعادل index[array] و (من المفترض) لماذا.

شركة array[index] = *(array + index) = *(index + array) = index[array].على افتراض i يكون 1 (وإلا فإن السلوك غير محدد)، 1[arr] يعادل arr[1] ويحتوي على قيمة 40.

حسنًا، دعونا نرى هل سنرى...

matilda:~ jeremyp$ cat > foo.c
int main(){

    int arr[2]={30,40};
    printf("%dn",i[arr]);
    return 0;
}
matilda:~ jeremyp$ cc foo.c
foo.c:4:5: warning: implicitly declaring library function 'printf' with type 'int (const char *, ...)'
    printf("%dn",i[arr]);
    ^
foo.c:4:5: note: please include the header <stdio.h> or explicitly provide a declaration for 'printf'
foo.c:4:18: error: use of undeclared identifier 'i'
    printf("%dn",i[arr]);
                 ^
1 warning and 1 error generated.

نعم بالفعل، i غير محدد.إما أن تحتاج

int i = 1;

قبل هذا البيان أو أنه ليس i, ، انه 1.دعونا نحاول ذلك...

matilda:~ jeremyp$ cat >foo.c
#include <stdio.h> // Stops the warning
int main(){

    int arr[2]={30,40};
    printf("%d\n",1[arr]); // Also added a \ so we get a line feed.
    return 0;
}
matilda:~ jeremyp$ cc foo.c
matilda:~ jeremyp$ ./a.out
40

هذا يعمل الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top