代码之家  ›  专栏  ›  技术社区  ›  ogs

指向包含在结构中的结构的指针

  •  1
  • ogs  · 技术社区  · 9 年前

    我在Linux下使用串口。因为我很少有接口,所以我定义了两种结构:

    typedef struct
    {
       int  handle;
       unsigned int port;
       unsigned short baudRate;
       unsigned char parity;
       char  device[128];
    } tS_PORT;
    
    typedef struct
    {
       unsigned char testSts;
       unsigned char testRet;
       tS_PORT sPort; 
    } tR_PORT;
    

    已声明变量R01 tR_PORT R01 = { 5,0 };

    如何使用tS_PORT上的指针?

    我尝试了以下代码,但没有预期结果。

    int test(void)
    {
       int ret;
       ret = sOpen(&R01->sPort); // or ? ret = sOpen(R01->&sPort);   
       return 0;
    }
    
    static int sOpen(tS_PORT *pPort)
    {
       pPort->handle = open(pPort->device, O_RDWR | O_NOCTTY);
       if(pPort->handle < 0)
       {
          perror("open:");
          return (-1);
       }
       return (pPort->handle);
    }
    
    ... few functions
    
    static int sClose(tS_PORT *pPort)
    {
       return (close(pPort->handle));
    }
    

    编辑1:

    考虑到Kerrek SB的回应后。它有效,但最后一个函数没有返回预期值。

    int test(void)
    {
       int ret;
       int closeRet;
       ret = sOpen(&R01.sPort);
       printf("ret = %d\n", ret);  
       closeRet = sClose(&R01.sPort);
       printf("closeRet = %d\n", closeRet);
       printf("handle = %d\n", R01.sPort.handle);
       return 0;
    }
    
    static int sOpen(tS_PORT *pPort)
    {
       pPort->handle = open(pPort->device, O_RDWR | O_NOCTTY);
       if(pPort->handle < 0)
       {
          perror("open:");
          return (-1);
       }
       return (pPort->handle);
    }
    
    ... few functions
    
    static int sClose(tS_PORT *pPort)
    {
       return (close(pPort->handle));
    }
    

    返回:

       ret = 4;  
       closeRet = 0
       handle = 4
    

    为什么句柄不等于0端口总是打开的,不是吗?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Kerrek SB    9 年前

    你想要的 &R01.sPort 。请注意 R01 不是指针。