📅  最后修改于: 2023-12-03 15:14:26.692000             🧑  作者: Mango
作为一名程序员,在找工作或升职方面,面试是必不可少的环节。这篇文章介绍了一些C编程面试中常见的问题,以帮助程序员在面试中取得成功。
指针在C语言中非常重要,因为C语言中没有引用类型。指针可以让程序员访问内存中的任何位置,从而实现高效的数据结构和算法。指针定义的语法如下:
type *ptr;
其中"type"为指针变量所指向的数据类型,"ptr"表示声明一个指向"type"类型的指针变量,可以通过"&"运算符获得变量的地址。指针变量可以通过""运算符间接访问所指向的值。
下面是一些C语言中常见的指针使用场景:
下面是一个指针的例子:
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a;
printf("a的值:%d\n", a);
printf("ptr指向的值:%d\n", *ptr);
return 0;
}
输出:
a的值:10
ptr指向的值:10
内存模型指的是C语言中变量和内存的关系。在C语言中,每个变量都有一个内存地址,可以通过指针访问。C语言中的内存分为四个区域:栈、堆、全局变量区和常量区。
以下是内存模型的示例:
#include <stdio.h>
int global_var;
static int static_global_var;
int main() {
int num = 10;
static int static_var;
int *ptr = (int *)malloc(sizeof(int));
char *str = "hello";
const char * const_str = "world";
printf("&num地址:%p\n", &num);
printf("&static_var地址:%p\n", &static_var);
printf("&global_var地址:%p\n", &global_var);
printf("&static_global_var地址:%p\n", &static_global_var);
printf("&ptr地址:%p\n", &ptr);
printf("&str地址:%p\n", &str);
printf("&const_str地址:%p\n", &const_str);
return 0;
}
输出:
&num地址:0x7ffd7041b5e0
&static_var地址:0x55fc0814f018
&global_var地址:0x55fc080bc040
&static_global_var地址:0x55fc080bc044
&ptr地址:0x7ffd7041b5d8
&str地址:0x7ffd7041b5d0
&const_str地址:0x55fc0814c078
C语言中常见的数据结构有数组、链表、栈、队列、哈希表、二叉树等。
以下是链表的实现示例:
#include <stdio.h>
#include <stdlib.h>
// 链表节点定义
struct ListNode {
int val;
struct ListNode *next;
};
// 创建一个新的链表节点
struct ListNode * createNode(int val) {
struct ListNode *node = (struct ListNode *) malloc(sizeof(struct ListNode));
node->val = val;
node->next = NULL;
return node;
}
// 在链表末尾添加一个节点
struct ListNode * addNode(struct ListNode *head, int val) {
struct ListNode *node = createNode(val);
if (head == NULL) {
return node;
}
struct ListNode *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
return head;
}
// 打印链表
void printList(struct ListNode *head) {
struct ListNode *p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
int main() {
struct ListNode *head = NULL;
head = addNode(head, 1);
head = addNode(head, 2);
head = addNode(head, 3);
printList(head);
return 0;
}
输出:
1 2 3
C语言中常见的算法有排序算法、字符串算法、树遍历算法、图算法等。以下是快排的实现示例:
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (arr[j] <= pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return i + 1;
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
quickSort(arr, low, pivot - 1);
quickSort(arr, pivot + 1, high);
}
}
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {5, 1, 3, 7, 9, 2};
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
printArray(arr, n);
return 0;
}
输出:
1 2 3 5 7 9
C语言中常见的文件操作函数有fopen()、fclose()、fread()、fwrite()、fseek()、ftell()等。以下是一个文件读取的示例:
#include <stdio.h>
int main() {
FILE *fp = fopen("file.txt", "r");
char buff[255];
while (fgets(buff, 255, fp) != NULL) {
printf("%s", buff);
}
fclose(fp);
return 0;
}
"file.txt"文件内容:
Hello world!
This is a file.
输出:
Hello world!
This is a file.
本文介绍了C语言中常见的面试问题,包括指针、内存模型、数据结构、算法和文件操作等。读者可以根据自己的经验和需要进行补充和深入研究,以便在面试中取得好的成绩。