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

التعامل مع المؤشرات و السجلات pointer , struct بلغة ++c

Asma'a

السؤال

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...