اذهب إلى المحتوى

السؤال

نشر

لوسمحتم كنت أريد أن تعيد الدالة عنوان من نوع 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);

}

 

Recommended Posts

  • 0
نشر

مرحبا أسماء،

لدينا سجلين 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.

بالتوفيق

  • 0
نشر

السلام عليكم

سبب الخطأ هو انشاء المتغير 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;
}

 

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...