C语言中指向指针的指针笔试题有哪些,给出示例代码并写上注释

时间: 2023-06-25 10:06:27 浏览: 67
指向指针的指针,又称为二级指针,是C语言中比较重要的概念之一,尤其在涉及到动态内存分配的情况下。以下是几个常见的指向指针的指针的笔试题: 1. 交换两个变量的值 示例代码: ```c void swap(int **p, int **q) { int *temp = *p; *p = *q; *q = temp; } int main() { int a = 1, b = 2; int *p = &a, *q = &b; printf("Before swap: a=%d, b=%d\n", a, b); swap(&p, &q); printf("After swap: a=%d, b=%d\n", a, b); return 0; } ``` 注释:swap函数接受两个指向指针的指针作为参数,通过解引用操作交换两个指针所指向的变量的值。在main函数中,定义了两个变量a和b,并分别取其地址赋值给指针p和q。调用swap函数时,需要传入p和q的地址,因为swap函数需要修改p和q所指向的变量。最后输出a和b的值,可以看到它们已经被成功交换了。 2. 动态分配二维数组 示例代码: ```c int main() { int **arr; int n = 3, m = 4, i, j; arr = (int **)malloc(n * sizeof(int *)); for (i = 0; i < n; i++) { arr[i] = (int *)malloc(m * sizeof(int)); for (j = 0; j < m; j++) { arr[i][j] = i * m + j; } } for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { printf("%d ", arr[i][j]); } printf("\n"); } for (i = 0; i < n; i++) { free(arr[i]); } free(arr); return 0; } ``` 注释:在main函数中,定义了一个指向指针的指针arr,用于存储动态分配的二维数组。首先分配n个int指针的空间,即arr的空间,然后分别为每个指针分配m个int的空间,即二维数组的每一行空间。接着,用两个for循环为每个元素赋值,最后输出数组中的值。注意,在释放内存时,需要先释放每一行的空间,再释放arr的空间。 3. 按照指定顺序输出链表 示例代码: ```c struct Node { int data; struct Node *next; }; void printList(struct Node **head) { struct Node *cur, *prev, *next; cur = *head; prev = NULL; while (cur != NULL) { next = cur->next; cur->next = prev; prev = cur; cur = next; } *head = prev; while (*head != NULL) { printf("%d ", (*head)->data); *head = (*head)->next; } } int main() { struct Node *head = NULL; struct Node *n1, *n2, *n3; n1 = (struct Node *)malloc(sizeof(struct Node)); n2 = (struct Node *)malloc(sizeof(struct Node)); n3 = (struct Node *)malloc(sizeof(struct Node)); n1->data = 1; n2->data = 2; n3->data = 3; n1->next = n2; n2->next = n3; n3->next = NULL; head = n1; printList(&head); return 0; } ``` 注释:定义了一个简单的链表结构体Node,包含一个数据成员data和一个指向下一个节点的指针next。printList函数接受一个指向指针的指针,用于修改链表头节点的指向,使链表反转。在链表反转完成后,再遍历链表输出每个节点的值。在main函数中,创建了一个包含3个节点的链表,并将头节点赋值给head。调用printList函数时,传入head的地址,用于修改head指针的值。最后输出链表中的元素。

相关推荐

最新推荐

recommend-type

C语言 结构体和指针详解及简单示例

本文主要介绍C语言 结构体和指针,这里整理了相关资料,并附示例代码和实现结果,以便大家学习参考,希望能帮助学习C语言的朋友
recommend-type

C语言 用指针作为函数返回值详解

本文主要介绍C语言 用指针作为函数返回值,这里整理了相关资料及示例代码,帮助大家学习理解此部分知识,有需要的同学可以参考下
recommend-type

C语言基础面试题02(指针和内存).docx

本文档主要是针对C语言的内存和指针部分的基础面试题,我们可以把内存想象为成一列很长很长的货运火车,有很多大小相同的车厢,而每个车厢正好相当于在内存中表示一个字节。这些车厢装着不同的货物,就像我们的内存...
recommend-type

C语言中二级指针的实例详解

主要介绍了C语言中二级指针的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握理解二级指针的知识,需要的朋友可以参考下
recommend-type

深入分析C语言中结构体指针的定义与引用详解

本篇文章是对C语言中结构体指针的定义与引用进行了详细的分析介绍,需要的朋友参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

spring添加xml配置文件

1. 创建一个新的Spring配置文件,例如"applicationContext.xml"。 2. 在文件头部添加XML命名空间和schema定义,如下所示: ``` <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。