C 结构体操作

来源:互联网 发布:武汉百胜睿迪软件测试 编辑:程序博客网 时间:2024/06/10 19:55

学完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;}


0 0
原创粉丝点击