面试笔试题
在32位系统里面,用C语言写一个程序,如何判断小端和大端
#include <stdio.h>// 判断系统字节序的函数
void checkEndianness() {unsigned int num = 1;char *ptr = (char*)#// 如果第一个字节存储的是最低有效字节,则是小端if (*ptr) {printf("Little endian\n");}// 否则是大端else {printf("Big endian\n");}
}int main() {// 调用函数来检查字节序checkEndianness();return 0;
}
用C语言写一个链表逆置
#include <stdio.h>
#include <stdlib.h>// 定义链表节点结构体
struct Node {int data;struct Node* next;
};// 函数声明
void insertAtEnd(struct Node** head_ref, int new_data);
void printList(struct Node* node);
void reverseList(struct Node** head_ref);// 在链表末尾插入新节点
void insertAtEnd(struct Node** head_ref, int new_data) {// 为新节点分配内存struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));struct Node* last = *head_ref; // 用于遍历链表// 给新节点赋值new_node->data = new_data;new_node->next = NULL;// 如果链表为空,则新节点为头节点if (*head_ref == NULL) {*head_ref = new_node;return;}// 找到最后一个节点while (last->next != NULL)last = last->next;// 将新节点链接到最后一个节点last->next = new_node;return;
}// 打印链表
void printList(struct Node* node) {while (node != NULL) {printf("%d ", node->data);node = node->next;}printf("\n");
}// 反转链表
void reverseList(struct Node** head_ref) {struct Node* prev = NULL;struct Node* current = *head_ref;struct Node* next = NULL;while (current != NULL) {// 保存当前节点的下一个节点next = current->next;// 将当前节点的指针反转current->next = prev;// 移动指针到下一对节点prev = current;current = next;}// 将头指针指向最后一个节点*head_ref = prev;
}// 主函数
int main() {struct Node* head = NULL; // 初始化空链表// 在链表末尾插入节点insertAtEnd(&head, 1);insertAtEnd(&head, 2);insertAtEnd(&head, 3);insertAtEnd(&head, 4);insertAtEnd(&head, 5);printf("Original list: \n");printList(head);// 反转链表reverseList(&head);printf("Reversed list: \n");printList(head);return 0;
}
下面输出哪个选项能指向a[1] 这个元素?
对数组名 a 进行自增运算是非法的,因为数组名不是一个可修改的左值。在 C 语言中,数组名 a 表示数组的首地址,而数组的地址是一个常量,不能被修改。因此,a++ 这行代码会导致编译错误
#include "stdio.h"
int main(void) {int a[5] = {1,2,3,4,5};int *p = a;a++; //错误printf("%d\r\n",(a); // 错误printf("%d\r\n",*(a+1); // 正确return 0;
}
下面也是正确做法
#include "stdio.h"
int main(void) {int a[5] = {1,2,3,4,5};int *p = a;p++;printf("%d\r\n",*p);return 0;
}