C 结构体操作

    xiaoxiao2026-08-29  13

    学完oc再学c

    #include <stdio.h> #include <stdlib.h> #include <string.h> struct User { int id; char name[16]; struct User* next; }; struct User user_header = {0}; void addToHeader(struct User* user) { user->next = user_header.next; user_header.next = user; } /* 这种写法是错误的,最终user_header中只会有2个元素:当前元素,和next元素,因为直接操作了user_header的值,正确做法应该是操作地址 void addToFooter(struct User* user) { while(1) { printf("add to footer --- id:%d, name:%s, next:%p\n", user->id, user->name, user->next); if(user_header.next == NULL) { user_header.next = user; user->next = NULL; break; } user_header = *user_header.next; } } */ void addToFooter(struct User* user) { struct User* header = &user_header; while(1) { if(header->next == NULL) { header->next = user; user->next = NULL; break; } header = header->next; } } void insert(struct User* user) { struct User *current = &user_header; struct User *previous; while(1) { if(user->id < current->id) { user->next = current; previous->next = user; break; } previous = current; // 这两步千万别颠倒,要不就死循环了 current = current->next; } } void show(struct User* user) { while(user) { printf("id:%d, name:%s, next:%p\n", user->id, user->name, user->next); user = user->next; } } int main(int argc, char const *argv[]) { //struct User u1 = {1, "simon", NULL}; //struct User u2 = {2, "teieka", NULL}; //addToFooter(&u1); //addToFooter(&u2); struct User* u1 = (struct User*)malloc(sizeof(struct User)); u1->id = 1; strcpy(u1->name, "hello"); struct User* u2 = (struct User*)malloc(sizeof(struct User)); u2->id = 2; strcpy(u2->name, "world"); struct User* u5 = (struct User*)malloc(sizeof(struct User)); u5->id = 5; strcpy(u5->name, "!!!"); struct User* u6 = (struct User*)malloc(sizeof(struct User)); u6->id = 6; strcpy(u6->name, "..."); addToFooter(u1); addToFooter(u2); addToFooter(u5); addToFooter(u6); struct User* u4 = (struct User*)malloc(sizeof(struct User)); u4->id = 4; strcpy(u4->name, "***"); insert(u4); show(&user_header); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1311690.html
    最新回复(0)