اطلاعیه

Collapse
No announcement yet.

چطور میشه تو زبون C یک struct را به ورودی تابع اعمال کرد؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    چطور میشه تو زبون C یک struct را به ورودی تابع اعمال کرد؟

    سلام
    دوستان کسی میدونه چطور میشه به یک تابع که دارای چند ورودی است یک struct که دارای چندین عضو از همان ورودی هاست رو به عنوان ورودی تابع مشخص کرد(این sturct توسط اشاره گرها قراره چند تا خروجی هم به من بده)
    لطفا اگر کسی میدونه یه مثال بزنه

    #2
    پاسخ : چطور میشه تو زبون C یک struct را به ورودی تابع اعمال کرد؟

    سلام
    شما میخواید از یک ساختمان به عنوان آرگومان یه تابع استفاده کنید.چند روش داریم:
    1-انتقال عناصر ساختمان به توابع:
    برای این نوع انتقال همانند متغییر های معمولی میشود عناصر را انتقال داد،به این صورت که نام متغییر ساختمان را همراه با عنصر مورد نظر،در آرگومان تابع ذکر کرد.ساختمان زیر را در نظر بگیرید:
    [code=c]struct structname{
    char x;
    int y;
    char buff[10];
    }[/code]
    حالا تو کد زیر هر یک از فراخوانی ها موجب انتقال عناصر متغییر ساختمان به تابع میشوند.
    [code=c]struct structname s_t;
    f(s_t.x);
    f(s_t.y);
    f(s_t.buff[3]);
    [/code]
    حالا یه مثال کامل:
    [code=c]#include <stdio.h>
    void samp(char *s);
    int main(void)
    {
    struct stct{
    char buff[20];
    int a;
    }st;
    printf("enter name and age:&quot
    scanf("%s%d",s.name,&s.a);
    samp(s.name);
    return 0;
    }
    void samp(char *s)
    {
    printf("name:"
    while(*s++)
    {
    printf("%c",s);
    }
    }
    [/code]
    فعلا ببین کارتو رامیاندازه.
    [img width=281 height=100]http://cdn.persiangig.com/preview/acPBCNLNNr/images.jpg[/img]

    دیدگاه


      #3
      پاسخ : چطور میشه تو زبون C یک struct را به ورودی تابع اعمال کرد؟

      ممنون از آرمان آروند به خاطر جوابی که داد
      ببین برنامه ای که من نوشتم اینه:
      [code=c]typedef struct Modbus
      {
      unsigned char Address;
      unsigned char Function_Code;
      unsigned int Register_Address;
      unsigned int Data;
      };

      unsigned char Modbus_Respone(Modbus* Modbusx)
      {
      unsigned char PDU[8];
      unsigned int CRC=0xFFFF;
      unsigned char x=0;
      UART_Enable_Receiver;
      for(x=0;x<=7;x++)PDU[x]=UART_Receive(); //Read PDU

      CRC=PDU[7];
      CRC=(CRC<<8)|PDU[6];

      if(CRC==Make_CRC(RTU,PDU,6))
      {
      *Modbusx->Address=PDU[0];
      *Modbusx->Function_Code=PDU[1];
      *Modbusx->Register_Address=(PDU[2]<<8)|PDU[3];
      *Modbusx->Data=(PDU[4]<<8)|PDU[5];
      //---------------------------------------------------------------
      }
      return PDU[0];
      }[/code]
      البته خود struct تو یه هدر دیگه تعریف شده که به فایل برنامه ADD شده ولی هر کاری میکنم بازم ارور میده اگر میشه یه راهنمایی کنید
      ممنون

      دیدگاه


        #4
        پاسخ : چطور میشه تو زبون C یک struct را به ورودی تابع اعمال کرد؟


        ببین کدی که گذاشتی چندین مورد داره تصحیحش کردم و برات میزامش، امتحانش کن ببین جواب میده.
        [code=c]typedef struct Modbus
        {
        unsigned char Address;
        unsigned char Function_Code;
        unsigned int Register_Address;
        unsigned int Data;
        };

        unsigned char Modbus_Respone(struct Modbus*);

        int main(void)
        {
        }

        unsigned char Modbus_Respone(struct Modbus *Modbusx)
        {
        unsigned char PDU[8];
        unsigned int CRC=0xFFFF;
        unsigned char x=0;
        UART_Enable_Receiver;
        for(x=0;x<=7;x++)PDU[x]=UART_Receive(); //Read PDU

        CRC=PDU[7];
        CRC=(CRC<<8)|PDU[6];

        if(CRC==Make_CRC(RTU,PDU,6))
        {
        Modbusx->Address=PDU[0];
        Modbusx->Function_Code=PDU[1];
        Modbusx->Register_Address=(PDU[2]<<8)|PDU[3];
        Modbusx->Data=(PDU[4]<<8)|PDU[5];
        //---------------------------------------------------------------
        }
        return PDU[0];
        }

        [/code]
        [img width=281 height=100]http://cdn.persiangig.com/preview/acPBCNLNNr/images.jpg[/img]

        دیدگاه


          #5
          پاسخ : چطور میشه تو زبون C یک struct را به ورودی تابع اعمال کرد؟

          از جوابی که دادی واقعا ممنون دیگه ارور نمیده :wow: :wow:
          آرمان جزوه ای چیزی نداری که در مورد این جزییات ریز زبون توضیح داده باشه راستش من برا زبون C آموزشی ندیدم و هر چی میدونم تجربیه.البته اگر برات زحمت نیست
          بازم ممنون برا جواب کاملت

          دیدگاه


            #6
            پاسخ : چطور میشه تو زبون C یک struct را به ورودی تابع اعمال کرد؟

            خدا رو شکر
            کتاب تا دلت بخواد هست برای نمونه:
            http://p30download.com/fa/entry/52621/
            [img width=281 height=100]http://cdn.persiangig.com/preview/acPBCNLNNr/images.jpg[/img]

            دیدگاه


              #7
              پاسخ : چطور میشه تو زبون C یک struct را به ورودی تابع اعمال کرد؟

              آقای آرمان آروند سوالای من تمومی نداره
              میشه یه تابع رو مثل C# با struct ها فراخوانی کرد باز اگر سراغ مثال قبلی بریم ما یه struct مثل modbus داشته باشم که با نوشتن modbus.respone بتونیم تابع رو فراخوانی کنیم یا با نوشتن modbus.address بتونیم متغیر ورودی اون تابع رو مقدار دهی کنیم .
              تشکر

              دیدگاه


                #8
                پاسخ : چطور میشه تو زبون C یک struct را به ورودی تابع اعمال کرد؟

                این طور که متوجه شدم میخوای کلاس کاریت رو ببری بالا اگه منظورت این هست که مانند زبان های شیء گرا کار کنی مثلا بگی test.s یه تابع فراخوانی بشه برای زبان سی جواب منفیه و برای این کار باید بری سراغ c++ و یا جاوا و یا C# و هر زبان شیء گرای دیگر.
                [img width=281 height=100]http://cdn.persiangig.com/preview/acPBCNLNNr/images.jpg[/img]

                دیدگاه

                لطفا صبر کنید...
                X