C语言结构体数据引用

typedefstruct{charname[10];charaddress[50];charphonenum[20];charemail[20];charremark[... typedef struct
{
char name[10];
char address[50];
char phonenum[20];
char email[20];
char remark[50];
struct mylist *next;
}mylist;
mylist *r;
r=r->next;//这行有错吗
r->next=r->next->next;这样写 有错吗
最后两行 在编译的时候
r=r->next;这行会有以下warning
ReadList.c(28) : warning C4133: '=' : incompatible types - from 'struct mylist *' to 'struct mylist *'
r->next=r->next->next; 这行 在vc++中会出错
不知道 可不可以详细解释下 为什么
上面的代码知识截取的一部分,完整代码都是分配了空间的,并且有赋值
展开
 我来答
garymb
2009-10-08 · TA获得超过717个赞
知道小有建树答主
回答量:326
采纳率:100%
帮助的人:388万
展开全部
都没错,就是普通的指针移动操作而已,但是注意你这样做的意义是什么
r = r->next;//r已经移动到了链表(结构体)的下一个节点
r->next = r->next->next;//之前r(最原始的r)的下一节点(即上面赋值改变的操作)的下一个节点移动到了再下一个节点
----------------------------------------------------------
说点自己的看法,首先,觉得楼主的结构体定义得有点问题,既然是typedef和struct混用的定义,那么就是先定义了一个结构体,但是你的这个结构体是没有标签的,然后你给这个结构体定义了一个别名mylist,好这个看上去是没问题,但是你的结构体里面的
struct mylist *next;是什么意思呢?mylist是什么?你的定义还没有完成怎么能在里面用后面的类型,还有,你定义的结构体标签是没有标签么?,但是我很奇怪为什么这里没有报错,而是在后面赋值的时候出现了不兼容的指针类型的警告。上面说得有点模糊,这样,你给struct加上一个标签定义成这样
typedef struct s_tag
{
char name[10];
char address[50];
char phonenum[20];
char email[20];
char remark[50];
struct s_tag *next;
}mylist;

保证你说的警告错误都没了
关于上面的更详细说明看这个http://zhidao.baidu.com/question/119210358.html的解答答案
mickeybird2000
2009-10-07
知道答主
回答量:19
采纳率:0%
帮助的人:0
展开全部
首先你的结构体就有错了。当编译器编译到这行struct mylist *next;时它无法查知mylist是什么类型。正确的代码应该为:

typedef struct node
{
char name[10];
char address[50];
char phonenum[20];
char email[20];
char remark[50];
struct node *next;
}mylist;
这里mylist *r;你只是定义了一个mylist指针,并没有说明它指向何处,所以这行r=r->next;的操作是错误的。应该在这行前面加上这行r=(mylist*) malloc(sizeof(mylist));
说明它指向内储中的某上地方。
如果你有说明它指向何处,这行就r->next=r->next->next;就没有错了。注意你在堆上申请一个空间,操作完记得释放,不然会造成内储泄漏。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友03ab49e71
2009-10-06
知道答主
回答量:19
采纳率:0%
帮助的人:8.3万
展开全部
都有错。
mylist *r;
只是声明了一个指针,并没有为其分配空间,不能访问。即使你访问到数据了,那也只是访问到内存中原有的数据。
先分配空间
r=(mylist*) malloc(sizeof(mylist));
然后初始化r中的内容。
初始化后才执行
r=r->next;
r->next=r->next->next;
而且要确认每个你所访问指针指向的地址分配了空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DGjYE
2009-10-06 · 超过33用户采纳过TA的回答
知道小有建树答主
回答量:104
采纳率:0%
帮助的人:102万
展开全部
mylist *r;
这行只是声明了一个mylist指针并没有给它分配内存。
在这行下面加上
r = new mylist;
就没问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式