如何使C程序指针指向自身

时间:2011-03-02 20:52:03

标签: c

我有一个C程序,我必须修改它,以便a链接到自己,b链接到cc链接到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;
}

如何指向自身的指针?

3 个答案:

答案 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;
    

你能看到你做错了吗?