【问题标题】:How to use typedef of a pointer variable of a structure to point to the same structure varible如何使用结构的指针变量的typedef指向同一个结构变量
【发布时间】:2015-10-19 23:43:03
【问题描述】:
#include<stdio.h>
//This program is about structure and there pointer
//
typedef struct{
    int i;
    char c;
}str1,*strptr;

str1 str[5];
strptr *ptr;

int main(){
    ptr = &str;// This is shown as incompatible type assignment **warning**
    ptr->i=35; // **error**: request for member 'i' in something  
               //not a structure or union

    ptr->c='d';//**error**: request for member 'c' in 
                // something not a structure or union
    printf("My structure values are %d %c\n",str[0].i,str[0].c);

return 0;
}

当我运行这个程序时,会出现一个警告和两个错误。请阅读注释行以了解警告和错误。

我错过了什么?

【问题讨论】:

    标签: c pointers struct typedef


    【解决方案1】:

    在您的代码中,strptr 已经是指针类型。你需要改变

    strptr *ptr;
    

    strptr ptr;
    

    【讨论】:

    • 错误已解决,但仍然发出警告为“警告:来自不兼容指针类型的赋值”
    • @AkshayPatil 1) 写信 ptr = str; 2) 了解更多信息,请参阅 this answer
    【解决方案2】:

    您将strptr 定义为指向结构的指针。因此

    strptr *ptr;  
    

    ptr 声明为指向结构的指针。 &amp;str 是指向 struct 的类型指针,与 ptr 的类型不兼容。

    将上面的声明改为

    strptr ptr;
    

    【讨论】:

      【解决方案3】:

      只需放下指针 typedef

      typedef struct{
        int i;
        char c;
      } str1;
      

      因为它显然会混淆,并使用

      str * strptr = &str;
      

      【讨论】:

        【解决方案4】:

        你应该声明ptr喜欢

        strptr ptr;
        

        因为strptr 已经声明了一个指针

        typedef struct{
            int i;
            char c;
        }str1, *strptr;
               ^^^^^^^^
        

        主要是必须有

        ptr = str;
              ^^^^
        

        在这种情况下,ptr 将指向数组 str 的第一个元素。该语句等价于

        ptr = &str[0];
        

        C 中的 main 函数应该像这样声明

        int main( void )
                 ^^^^^^  
        

        并且像全局变量一样声明ptrstr 是没有意义的。最好将它们的声明放在 main 中

        int main( void )
        {
            str1 str[5] = { 0 };
            strptr ptr = str;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-21
          相关资源
          最近更新 更多