Asma'a نشر 2 ديسمبر 2020 أرسل تقرير نشر 2 ديسمبر 2020 لوسمحتم كنت أريد أن تعيد الدالة عنوان من نوع struct ,وأستقبل الناتج بمؤشر من نوع struct أيضاً لكن المحرر بيطلعة ايرور ممكن افهم ايش السبب #include<iostream> using namespace std; typedef struct s1 { float r; float m; }s; s *func(s a,s b,s *c) { cout<<"\npointer\t : "<<c<<"\n*pointer\t : "<<&c;//<<"\n&pointer\t : "<<*c<<endl; c->r=a.r+b.r; c->m=a.m+b.m; return c; } int main() { s a,b,*c,*result; cout<<"\n####################The First Struct###################\n"; cout<<"number one";cin>>a.r; cout<<"number Two";cin>>a.m; cout<<"\n####################The Second Struct###################\n"; cout<<"number one";cin>>b.r; cout<<"number Two";cin>>b.m; cout<<"\n####################The pointer Struct###################\n"; cout<<"number one";cin>>(*c).r; cout<<"number Two";cin>>(*c).m; result=func( a, b,&c); } 1 اقتباس
0 Wael Aljamal نشر 2 ديسمبر 2020 أرسل تقرير نشر 2 ديسمبر 2020 مرحبا أسماء، لدينا سجلين a,b نريد أن نجمع قيمتهما في دالة func و نخزن النتيجة في result مع استخدام مؤشر وسيط هو c. الخطأ هو أن الدالة func تستقبل الوسيط الثالث من النوع pointer مؤشر على سجل s* ولدينا فعليا المتحول c هو من هذا النوع، فنقوم بتمريره بدون وضع & (التمرير بالعنوان) لكي يحدث توافق بين نوعي المتحولات و الوسيط للتابع. كما يوجد تعليمات لافائدة (إدخال قيم للمتحول c ..)منها سوف اكتب الشيفرة بالطريقة المناسبة: #include<iostream> using namespace std; typedef struct s1 { float r; float m; } s; s *func(s a,s b,s *c) { //cout<<"\npointer\t : "<< c <<"\n*pointer\t : "<< (&c); //<<"\n&pointer\t : "<<*c<<endl; c->r=a.r+b.r; c->m=a.m+b.m; return c; } int main() { s a,b,*c,*result; cout<<"\n####################The First Struct###################\n"; cout<<"number one\n"; cin>>a.r; cout<<"number Two\n"; cin>>a.m; cout<<"\n####################The Second Struct###################\n"; cout<<"number one\n"; cin>>b.r; cout<<"number Two\n"; cin>>b.m; cout<<"\n####################The pointer Struct###################\n"; result=func(a,b,c); cout <<"result=\t r: " << result->r <<"\tm: " << result->m << endl; } أي نمرر c كما هو، حيث من الواضح أنه فقط وسيط للجمع و سنخزن النتيجة في result. بالتوفيق 1 اقتباس
0 Hamada Sayed نشر 2 ديسمبر 2020 أرسل تقرير نشر 2 ديسمبر 2020 السلام عليكم سبب الخطأ هو انشاء المتغير c كمؤشر واسناد قيم لخصائصه قبل حجز مساحه من الذاكره له بعد التعديل بتاريخ 3 ساعات قال أسماء عبدالله محمود النظاري: #include<iostream> using namespace std; typedef struct s1 { float r; float m; }s; s *func(s a,s b,s *c) { cout<<"\npointer\t : "<<c<<"\n*pointer\t : "<<&c;//<<"\n&pointer\t : "<<*c<<endl; c->r=a.r+b.r; c->m=a.m+b.m; return c; } int main() { s a,b,c,*result; cout<<"\n####################The First Struct###################\n"; cout<<"number one";cin>>a.r; cout<<"number Two";cin>>a.m; cout<<"\n####################The Second Struct###################\n"; cout<<"number one";cin>>b.r; cout<<"number Two";cin>>b.m; result=func( a, b,&c); cout<<"\n####################The pointer Struct###################\n"; cout<<"number one = " <<result->r <<endl; cout<<"number Two = " <<result->m <<endl; return 0; } اقتباس
السؤال
Asma'a
لوسمحتم كنت أريد أن تعيد الدالة عنوان من نوع struct ,وأستقبل الناتج بمؤشر من نوع struct أيضاً لكن المحرر بيطلعة ايرور ممكن افهم ايش السبب
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.