void 和Void*的详细讲解

一、void的含义,首先单词void的常见中文意思为“空的”。C语言中 void指“无类型” 
二、void的作用 
1.用在函数当中 
①对函数返回值的限定。 
②对函数参数的限定。 
如: 
void func(void);/表示func()这个函数没有返回,输入参数为空。一般省略出入的空参数写为,void func()。/

与之对应的如: 
int func(int,int);/表示func这个函数返回值为一个int型的数据。传入的两个int型的参数。
2.用来修饰指针变量 
“void * 变量名”指无类型指针。这种变量可以指向任何数据。 
如: 
int *A; 
Void *B; 
B=A;/为了方便记住这种语法现象,这段代码的意思,可理解为“无类型的指针变量B(可以指向任何数据类型)现在指向了一个int型的变量”。/

注意: 不能写为 A =B;/因为B可指向是任意类型的变量,而A中只能指向整形的变量。
如果确实要将B赋给其他类型指针, 
则需要强制类型转换如:A = (int )B;/将B只指向的变量进行强制类型转换*/


好的!下面是关于如何用C++编写`void MaxNode(BTNode *b, char &max)`函数详细讲解。 --- ### 问题解析 我们需要在一个二叉树中找到最大的字符值节点,并将其存储到引用变量`max`中。假设二叉树由以下结构体定义: ```cpp typedef struct BTNode { char data; // 存储节点数据(这里假设为字符) struct BTNode *lchild; // 左子树指针 struct BTNode *rchild; // 右子树指针 } BTNode; ``` 目标是设计一个名为`MaxNode`的递归函数,传入根节点地址以及保存最大值的引用参数`max`。 --- ### 函数实现 以下是完整的代码实现及注释说明: ```cpp #include <iostream> using namespace std; // 定义二叉树结点结构 typedef struct BTNode { char data; // 结点值为字符型 BTNode *lchild, *rchild; // 左右子树指针 } BTNode; // 查找二叉树中的最大节点值 void MaxNode(BTNode* b, char& max) { if (b != nullptr) { // 如果当前节点非空 if (b->data > max) // 更新最大值 max = b->data; // 递归检查左子树右子树 MaxNode(b->lchild, max); MaxNode(b->rchild, max); } } int main() { // 创建一棵简单二叉树用于测试 BTNode* root = new BTNode{'g', new BTNode{'d', new BTNode{'a'}, new BTNode{'f'}}, new BTNode{'j', new BTNode{'h'}, new BTNode{'k'}}}; char maxValue = '\0'; // 初始设置为最小字符值(或可以初始化为第一结点值) MaxNode(root, maxValue); // 调用函数获取最大值 cout << "最大节点值:" << maxValue << endl; return 0; } ``` --- ### 运行逻辑解释 1. **初始条件** 我们通过传递一个引用类型的变量`max`来实时更新最大值。为了保证正确性,建议将`max`初始化成非常小的一个字符值(如`\0`),然后逐步替换为更大的实际值。 2. **递归规则** 每次访问一个节点时,都将该节点的值与当前记录的最大值做对比,若更大则刷新最大值。随后分别深入左右两棵子树继续探查是否有更优解。 3. **终止条件** 若遇到空节点,则停止对该路径进一步深挖。 4. **时间复杂度** 因为每个节点仅会被考察一次,所以总体耗时正比于总的节点数n —— 即O(n)级别效率。 --- ### 示例运行效果 假如构造了一颗形似这样的树: ``` g / \ d j / \ / \ a f h k ``` 最终打印输出应该是字母‘k’代表这是整个字符串集中字典序最高的单个字符项。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值