السلام عليكم ،
كنت أرد على سؤال لأحد الأخوة هنا :
/index.php?showtopic=220720&view=getnewpost
ولكن هناك شيء غريب ، ولا أعرف لماذا يتصرّف المترجم هكذا .
لو أردت طباعة عنوان أول عنصر في المصفوفة فسأقوم بكتابة :
int x[]={1,2};
cout<<x<<endl;
cout<<&x[0]<<endl;النتيجة واحدة . ولكن عند تغيير نوع المصفوفة إلى char فسيطبع النص الكامل في هذه المصفوفة ،
char c[]={'T','H','E'};
cout<<c<<endl;
cout<<&c[0]<<endl;في كلا الحالتين سيطبع النص كامل THE ، لماذا هذه المعاملة الخاصة لـ char ؟
وهناك سؤال آخر، في نفس السياق ، وهو كيف يمكن أن نفسر السطر الثالث من هذا الكود :
int c[25]={1,2,3};
cout<<c<<endl;
cout<<&c<<endl; // what's wrong with this line ?
cout<<&c[0]<<endl;كل المخرجات لها نفس الناتج ؟
السطر الثاني و الأخير ، أعرف لماذا ، ولكن السطر الثالث ، أعتقد أنه من المفترض أن يطبع " عنوان المؤشر الذي يؤشر على أول عنصر في المصفوفة " ، أي أنه عنوان مختلف ؟ أليس كذلك ؟
والدليل أنه عند كتابة شيء كهذا :
int *c = new int[3]; c[0] = 1; c[1] = 2; c[2] = 3; cout<<c<<endl; cout<<&c<<endl; cout<<&c[0]<<endl;
فإن الناتج يظهر بشكل متوقع وهو أن عنوان المؤشر مختلف عن عنوان أول عنصر يشير إليه المؤشر .
المترجم المستخدم هو Visual C++ 2010 .


