C 为什么(tete->val)的值为0而不是1823

C 为什么(tete->val)的值为0而不是1823,c,C,我创建了一个函数,在链的第一个元素中添加一个值。通常,tete->Val的值为0。因为我这样做了:tete=r 你想要的是这样的东西: #include <stdio.h> #include <stdlib.h> struct element{ int val; struct element *suiv; }; typedef struct element element; void insertion(element **tete, int X) {

我创建了一个函数,在链的第一个元素中添加一个值。通常,tete->Val的值为0。因为我这样做了:tete=r


你想要的是这样的东西:

#include <stdio.h>
#include <stdlib.h>

struct element{
   int val;
   struct element *suiv;
};

typedef struct element element;

void insertion(element **tete, int X) {
   element *r;

   r = malloc(sizeof(*r));
   r->val = X;
   r->suiv = *tete;

   *tete = r;
}

int main(void){
   element *tete;

   tete = malloc(sizeof(*tete));
   tete->val=0;
   tete->suiv=NULL;

   insertion(&tete,1823);
   printf("%d",tete->val);

   return 0;
}
多个问题:

您的原始代码甚至不是有效的C代码,无法编译。 在main中,您声明一个指向element类型的对象的指针,但从不初始化它。但您试图访问其成员。这是未定义的行为。相反,您必须使用malloc为该结构分配内存,并将返回的指针分配给tete。 在插入中,您希望使tete指针从主函数指向新节点。但是,您不会修改主函数的tete指针,而是修改插入函数的参数tete。这对原始tete指针没有影响。相反,您需要向插入函数传递一个指向tete指针的指针。然后在插入中,您可以修改tete参数指向自身的指针。
你基本上是在问为什么void fint x{x=2;}int i=1;fi;printf%d,i;不打印2以gcc-Wall-Wextra-g的形式调用C代码,然后使用。阅读一本关于C语言的好书,作者是Claude Delhave,法语程序mez en language C:ISBN:978-2-212-12546-7。给我发电子邮件到basile@starynkevitch.net用英语或法语提及您的问题的URL element*tete可能应该是element**tete。我不知道如何感谢您的帮助。。
#include <stdio.h>
#include <stdlib.h>

struct element{
   int val;
   struct element *suiv;
};

typedef struct element element;

void insertion(element **tete, int X) {
   element *r;

   r = malloc(sizeof(*r));
   r->val = X;
   r->suiv = *tete;

   *tete = r;
}

int main(void){
   element *tete;

   tete = malloc(sizeof(*tete));
   tete->val=0;
   tete->suiv=NULL;

   insertion(&tete,1823);
   printf("%d",tete->val);

   return 0;
}