#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;
}
当我运行此程序时,会出现一个警告和两个错误。请阅读注释行以获取警告和错误。
我错过了什么?
答案 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 )
^^^^^^
将ptr
和str
声明为全局变量是没有意义的。最好将他们的声明放在主
int main( void )
{
str1 str[5] = { 0 };
strptr ptr = str;
答案 3 :(得分:0)
只需删除指针typedef
即可typedef struct{
int i;
char c;
} str1;
因为它显然会混淆,并使用
str * strptr = &str;