如何在C的while上下文中读取几次链表

我尝试编写代码以多次读取链表,而不调用void print(t_list *list)之类的特定功能,请参见下面的代码。我可以弄清楚为什么在while上下文中第二次无法读取我的代码,因为在我的第一个循环结束时,我的结构t_listNULL,而当我第二次启动时,我的结构struct仍然是NULL,显然什么也不能使用。

所以我有两个问题,

第一个:为什么我在通过函数void print(t_list *list)时可以读取两倍的链接列表,这很好,因为那是可行的,但是我不明白为什么在第二次读取t_list时{ {1}}

second:如何在NULLwhile上下文中倒退指针for到开头,以再次读取链接列表。

t_list

控制台

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

typedef struct s_list t_list;
struct s_list {
    int arg;
    t_list *next;
};


int add(t_list **ref,int arg) {
    t_list *temp;
    temp = NULL;
    if(!(temp = (t_list*)malloc(sizeof(t_list))))
        return (0);
    temp->arg = arg;
    temp->next = (*ref);
    (*ref) = temp;
    return(1);
}

void change(t_list *list) {
    printf("change arg:\n");
    while(list) {
        list->arg = 42;
        list = list->next;
    }
}

void print(t_list *list) {
    printf("list:\n");
    while(list) {
        printf("arg: %i\n",list->arg);
        list = list->next;
    }
}

int main() {
    t_list *list;
    list = NULL;
    add(&list,0);
    add(&list,1);
    add(&list,2);
    print(list); // work fine
    change(list);
    print(list); // work fine it's possible te read a second time but why ?
  
    // that's way don't work a second time
    while(list) {
        printf("arg: %i\n",list->arg);
        list = list->next;
    }

    while(list) {
        printf("arg: %i\n",list->arg);
        list = list->next;
    }

    return (0);
}
huanghongwang123 回答:如何在C的while上下文中读取几次链表

正如评论中指出的那样,我认为您应该阅读有关Apps Script quotas的信息。

当您将#include <stdio.h> #include <stdlib.h> #include <stdbool.h> char stringLength(char userString[]) { int i=0,count=0; while (userString[i] != '\0') { count = (count + 1); i = (i + 1); } return count; } bool stringCheck (char a[],char b[]) { bool isEquals = false; if (stringLength(a) == stringLength(b)) { int i=0,count=0; while (i<stringLength(a)) { if (a[i] == b[i]) { count+=1; } i+=1; } if (count == stringLength(a)) isEquals = true; else isEquals = false; } else isEquals = false; return isEquals; } int main() { stringCheck("abcd","abcd"); return 0; } 传递到var id = $(this).attr("scope"); var tp = $(this).attr("id"); $(this).tooltipster({ interactive:true,contentAsHTML: true,position: 'top',content: 'Chargement...',delay: '0',speed: 150,trigger: 'click' functionBefore: function(origin,continueTooltip) { continueTooltip(); $.ajax({ type: 'GET',url: '/ajax/platform.php',data: {variable1: variable1,variable2: variable2},success: function(data) { origin.tooltipster('content',data).data('ajax','cached'); $("#input1").click(function(d) { d.preventDefault(); alert("It works !"); }); } }); },theme: 'tooltipster-shadow' }); }); 的方法中时,指针变量list的值将被复制到print()方法的参数中。因此,无论您做什么t_list* list方法的print()都不会影响主方法的print。您可以通过在调用t_list* list方法之前和之后检查t_list* list的值来确认这一点:

list

由于print()的主要功能范围未更改,因此它们都应打印相同的值:

    printf("%p\n",list);
    print(list); 
    printf("%p\n",list);
本文链接:https://www.f2er.com/1398820.html

大家都在问