如何使用结构的指针变量的typedef指向相同的结构varible

时间:2015-07-29 06:34:16

标签: c pointers struct typedef

#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;
}

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

我错过了什么?

4 个答案:

答案 0 :(得分:5)

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

strptr *ptr;

strptr ptr;

答案 1 :(得分:2)

你将strptr指定为指向struct的指针。因此

strptr *ptr;  

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

将上述声明更改为

strptr ptr;

答案 2 :(得分:0)

您应该声明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声明为全局变量是没有意义的。最好将他们的声明放在主

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

答案 3 :(得分:0)

只需删除指针typedef

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

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

str * strptr = &str;