编译器吐出错误,说不能将" int转换为lin"并且无法转换 "加倍到林"当我的指针显然指向正确的位置时。
typedef struct lin
{
int data;
float next;
}ode;
void main()
{
ode*head;
ode a;
head=&a;
*head=9;
head++;
*head=10.5;
getch();
}
答案 0 :(得分:1)
我认为您对行号感到困惑。您的错误消息中有行号。请咨询他们,并注意下次将整个错误消息粘贴到StackOverflow 的重要性。
如果您要检查错误所抱怨的行(通过行号;查找数字),您会看到:
*head=9; // an attempt to assign an `int` to a `lin`
*head=10.5; // an attempt to assign a `double` to a `lin`
也许你的意思是:
head->data = 9;
head->next = 10.5
......或......
*head = (struct lin){.data = 9};
*head = (struct lin){.next = 10.5};
很难说。你甚至可能意味着:
head = &(struct lin){.data = 9};
head = &(struct lin){.next = 10.5};
想一想。您是否希望编译器猜出要分配给哪个成员?如果有多个int
和float
成员可供选择,该怎么办?当你不提供哪一个时,应该选择哪一个?
感谢您的编译器没有为您猜测,就像您编写head++;
指示编译器将指针向前推进一个元素一样,超出结束时a
。这称为缓冲区溢出。
你在读哪本书?
答案 1 :(得分:1)
如果你只想玩指针,那么你需要做一个指针算术,你永远不会进入分段错误或类型转换错误。请参考以下代码 -
#include <stdio.h>
typedef struct lin
{
int data;
float next;
}ode;
void main()
{
ode*head;
ode a;
head=&a;
*((int*)head)=9; //typecast pointer to int because assigning int value here
head = (ode*)((char*)head + sizeof(int)); //increase pointer by size of integer as after which memory for float is assigned
*((float*)head)=10.5;
head = (ode*)((char*)head - sizeof(int));//go to start of header again
printf("head->data:<%d>\nhead->next:<%f>",head->data,head->next);
}
由于这在某种程度上令人困惑,而且对其他程序员来说无法读取,因此您只需使用 - &gt;运算符,用于为结构的数据成员赋值。
答案 2 :(得分:0)