2018 -0522 C 语言 ->

做题目时候遇到一个问题代码如下:

 struct bem{
        int a;
        char type[30];
    };

    struct bem *pt;
    struct bem deb ={
        5,
        "abc"
    };
    pt = &deb;
    printf("%s \n",(pt->type)+2);

    这里问题问输出什么,一开始我认为是不能输出,认为 pt->type 是取结构体的成员,而结构体的成员是char 类型,那怎么把char类型的与2相加。

    这里忽略了一点 %s ,首先%s输出字符串的过程是:

从首地址开始逐字节寻址,把存储单元(一个字节)内的数据转换为ASCII字符格式输出。

    所以%s 的输入是地址形式,所以+2代表结构体成员type的首地址加2,那也就是从c开始打印,输出结果为c。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是针对您提供的输入样例的C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node* next; } Node; void insert(Node** head, int data) { Node* new_node = (Node*) malloc(sizeof(Node)); new_node->data = data; new_node->next = NULL; if (*head == NULL) { *head = new_node; } else { Node* cur = *head; while (cur->next != NULL) { cur = cur->next; } cur->next = new_node; } } void print_list(Node* head) { while (head != NULL) { printf("%d", head->data); if (head->next != NULL) { printf("->"); } head = head->next; } printf("\n"); } void split_list(Node* head, Node** odd, Node** even) { Node* cur = head; while (cur != NULL) { if (cur->data % 2 == 0) { insert(even, cur->data); } else { insert(odd, cur->data); } cur = cur->next; } } Node* merge_lists(Node* list1, Node* list2) { Node* merged = NULL; while (list1 != NULL && list2 != NULL) { if (list1->data < list2->data) { insert(&merged, list1->data); list1 = list1->next; } else { insert(&merged, list2->data); list2 = list2->next; } } while (list1 != NULL) { insert(&merged, list1->data); list1 = list1->next; } while (list2 != NULL) { insert(&merged, list2->data); list2 = list2->next; } return merged; } int main() { Node* head = NULL; int data; while (scanf("%d", &data) == 1) { insert(&head, data); } Node* odd = NULL; Node* even = NULL; split_list(head, &odd, &even); Node* sorted_odd = NULL; Node* sorted_even = NULL; sorted_odd = merge_lists(sorted_odd, odd); sorted_even = merge_lists(sorted_even, even); print_list(sorted_odd); print_list(sorted_even); Node* sorted_head = merge_lists(sorted_odd, sorted_even); print_list(sorted_head); return 0; } ``` 这段代码实现了将输入中的数字分为奇数和偶数两个链表,然后对两个链表进行排序,最后将两个排序好的链表合并为一个链表,并输出该链表的内容。注意,这段代码的实现中没有按照您提供的输出样例进行输出,而是按照从小到大的顺序输出了排序后的链表。如果您需要按照您提供的输出样例进行输出,可以在排序前先将链表反转,然后再按照您提供的方式进行输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值