C语言指针数组类面试题大全( 二 )


char *str = "hello";int len = strlen(str);for (int i = 0; i < len / 2; i++) {char tmp = *(str + i);*(str + i) = *(str + len - i - 1);*(str + len - i - 1) = tmp;}这里使用了指针操作符*和下标操作符[]来交换字符串中的字符 。
9. 如何使用指针数组实现字符串的比较?使用指针数组实现字符串的比较时,可以使用strcmp函数 。例如:
char *str1 = "hello";char *str2 = "world";int res = strcmp(str1, str2);if (res < 0) {printf("str1 < str2");} else if (res > 0) {printf("str1 > str2");} else {printf("str1 == str2");}这里使用了strcmp函数比较了两个字符串的大小 。
10. 如何使用指针数组实现字符串的连接?使用指针数组实现字符串的连接时,可以使用strcat函数 。例如:
char *str1 = "hello";char *str2 = "world";char *str3 = (char*)malloc(sizeof(char) * (strlen(str1) + strlen(str2) + 1));strcpy(str3, str1);strcat(str3, str2);这里使用了malloc函数动态分配了内存,然后使用strcpy函数将str1中的字符串拷贝到str3中,最后使用strcat函数将str2中的字符串连接到str3中 。
11. 如何使用指针数组实现字符串的分割?使用指针数组实现字符串的分割时,可以使用strtok函数 。例如:
char str[] = "hello,world";char *token = strtok(str, ",");while (token != NULL) {printf("%sn", token);token = strtok(NULL, ",");}这里使用了strtok函数将字符串按照指定的分隔符分割成若干个子字符串,并依次输出 。
12. 如何使用指针数组实现二维数组的访问?使用指针数组实现二维数组的访问时,可以使用指针操作符*和下标操作符[] 。例如:
int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};int **p = (int**)malloc(sizeof(int*) * 3);for (int i = 0; i < 3; i++) {*(p + i) = *(arr + i);}for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {printf("%d ", *(*(p + i) + j));}printf("n");}这里使用了指针操作符*和下标操作符[]来访问二维数组中的元素 。
13. 如何使用指针数组实现动态内存分配?使用指针数组实现动态内存分配时,可以使用malloc函数 。例如:
int *arr[10];for (int i = 0; i < 10; i++) {*(arr + i) = (int*)malloc(sizeof(int));**(arr + i) = i;}for (int i = 0; i < 10; i++) {printf("%d ", **(arr + i));}这里使用了malloc函数动态分配了内存,并将分配的内存地址存储到指针数组中 。
14. 如何使用指针数组实现链表结构?使用指针数组实现链表结构时,可以使用结构体和指针数组相结合的方式 。例如:
typedef struct Node {int data;int next;} Node;Node arr[10];int head = 0;int tAIl = 0;void add(int data){arr[tail].data = https://www.isolves.com/it/cxkf/yy/C/2023-08-06/data;arr[tail].next = tail + 1;tail++;}void print(){int p = head;while (p != tail) {printf("%d ", arr[p].data);p = arr[p].next;}}这里使用了一个结构体Node来表示链表的每个节点,然后使用指针数组arr来存储节点的信息 。head和tail分别表示链表的头和尾,add函数用于向链表中添加元素,print函数用于遍历链表并输出 。
15. 如何使用指针数组实现树结构?使用指针数组实现树结构时,可以使用结构体和指针数组相结合的方式 。例如:
typedef struct Node {int data;int left;int right;} Node;Node arr[10];int root = 0;void add(int data){int p = root;while (1) {if (data < arr[p].data) {if (arr[p].left == -1) {arr[p].left = tail;break;} else {p = arr[p].left;}} else {if (arr[p].right == -1) {arr[p].right = tail;break;} else {p = arr[p].right;}}}arr[tail].data = https://www.isolves.com/it/cxkf/yy/C/2023-08-06/data;arr[tail].left = -1;arr[tail].right = -1;tail++;}void print(int p){if (p == -1) {return;}printf("%d ", arr[p].data);print(arr[p].left);print(arr[p].right);}这里使用了一个结构体Node来表示树的每个节点,然后使用指针数组arr来存储节点的信息 。root表示树的根节点,add函数用于向树中添加元素,print函数用于遍历树并输出 。
难一点的面试题请实现一个函数,将一个二维数组按照从小到大的顺序排序,并输出排序后的结果 。要求使用指针数组实现 。

【C语言指针数组类面试题大全】


推荐阅读