C 为什么(tete->val)的值为0而不是1823
我创建了一个函数,在链的第一个元素中添加一个值。通常,tete->Val的值为0。因为我这样做了:tete=rC 为什么(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) {
你想要的是这样的东西:
#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;
}