我有一个C程序,我必须修改它,以便a
链接到自己,b
链接到c
和c
链接到b
。
它确实编译。但我不确定我是否做得对。
#include <stdio.h>
int main(){
struct list {
int data;
struct list *n;
} a,b,c;
a.data=1;
b.data=2;
c.data=3;
b.n=c.n=NULL;
a.n=a.n=NULL;
a.n= &c;
c.n= &b;
printf(" %p\n", &(c.data));
printf("%p\n",&(c.n));
printf("%d\n",(*(c.n)).data);
printf("%d\n", b.data);
printf("integer %d is stored at memory address %p \n",a.data,&(a.data) );
printf("the structure a is stored at memory address %p \n",&a );
printf("pointer %p is stored at memory address %p \n",a.n,&(a.n) );
printf("integer %i is stored at memory address %p \n",c.data,&(c.data) );
getchar();
return 0;
}
如何指向自身的指针?
答案 0 :(得分:1)
你说:
a links to itself, b links to c and c links to b
然后在你的代码中写下这个:
b.n=c.n=NULL;
a.n=a.n=NULL;
让我们一步一步走:
b.n=c.n=NULL;
将其分解为:
c.n=NULL;
b.n=c.n;
不是将c分配给b和b分配给c,而是将c.n赋值为NULL,然后将c.n(NULL,因为你刚才这样做)分配给b.c。
我的C有点弱,但你可能想要这样的东西:
b.n = &c;
c.n = &b;
这使用&amp;运营商的地址。同样适用于a.n=a.n=NULL;
表达式。
答案 1 :(得分:1)
b.n=c.n=NULL;
a.n=a.n=NULL;
b和c链接到无处;无处的链接(两次)
a.n= &c;
c.n= &b;
指向c的链接; c链接到b
你想要链接到; b链接到c,c链接到b ... so ... FAIL: - )
答案 2 :(得分:0)
假设:
list *a, *b, *c;
a=(list *)malloc(sizeof (list));
b=(list *)malloc(sizeof (list));
c=(list *)malloc(sizeof (list));
指向自身的链接
a->n=a;
b链接到c
b->n=c;
c链接到b
c->n=b;
你能看到你做错了吗?