left,值);但我们这里不使用 "&": search(root->left,值);-6ren"> left,值);但我们这里不使用 "&": search(root->left,值);-这个问题已经有答案了: Why we use "&(*" statement when double pointer to struct is an argument of a function? (-6ren">
gpt4 book ai didi

c - 为什么我们这里使用 "&"(: insert(&(*root)->left,值);但我们这里不使用 "&": search(root->left,值);

转载 作者:行者123 更新时间:2023-11-30 20:39:57 25 4
gpt4 key购买 nike

void instert(NODE**root, int value)
{
...
insert(&(*root)->left,value);
...
}

void search(NODE*root, int value)
{
...
search(root->left, value);
...
}

为什么我们使用&这里:insert(&(*root)->left,value);但我们不使用&这里:search(root->left, value);

最佳答案

这是在 C 中引入引用的一种方法。在第一种情况下,函数 insert 可以更改指针 left 如果它将像函数 serach 中那样按值传递> 那么函数insert的任何参数的改变都不会应用到原来的指针上。因此,该函数“通过引用”接受参数。

在第二种情况下,当使用函数搜索时,左指针不会改变。

考虑下面的例子会更清楚

#include <stdio.h>
#include <stdlib.h>

void f( char **p )
{
free( *p );
*p = ( char * )malloc( sizeof( char ) );
**p = 'B';
}

void g( char *p )
{
printf( "%c\n", *p );
}

int main()
{
char *p = ( char * )malloc( sizeof( char ) );
*p = 'A';

g( p );

f( &p );

g( p );

free( p );
}

如果函数 f 不接受“通过引用”的指针,则原始点的值不会改变。

考虑修改后的代码并比较其执行结果

#include <stdio.h>
#include <stdlib.h>

void f( char *p )
{
free( p ); // OOPS! memory was freed
p = ( char * )malloc( sizeof( char ) );
*p = 'B';
}

void g( char *p )
{
printf( "%c\n", *p );
}

int main()
{
char *p = ( char * )malloc( sizeof( char ) );
*p = 'A';

g( p );

f( p ); // after the call the program behaviour is undefined.

g( p );

free( p );
}

关于c - 为什么我们这里使用 "&"(: insert(&(*root)->left,值);但我们这里不使用 "&": search(root->left,值);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25045118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com