(A) func DoSomething(a *A) { b = a } (B) func DoSomething(a A) { b = &a }这两个函数的区别
时间: 2024-04-21 20:24:05 浏览: 15
这两个函数的区别在于参数的传递方式和对于结构体指针的操作。
函数 (A) 的参数是一个指向 `A` 结构体的指针 `a`,函数体内将 `a` 赋值给了新的变量 `b`。这个赋值操作只是简单地将 `a` 的指针值赋给了 `b`,并没有创建新的指针。因此,`b` 和 `a` 指向同一个内存地址,它们共享同一个结构体实例。对 `b` 或 `a` 的修改都会影响到同一个结构体实例。
函数 (B) 的参数是一个 `A` 结构体类型的值 `a`,函数体内将 `a` 的地址获取并赋值给新的变量 `b`。这个赋值操作创建了一个新的指针 `b`,它指向了 `a` 的地址。因此,`b` 和 `a` 指向不同的内存地址,它们分别指向不同的结构体实例。对 `b` 或 `a` 的修改互相不会影响到对方。
总结一下,函数 (A) 通过传递指针来共享同一个结构体实例,而函数 (B) 则通过传递值来创建新的结构体实例。你可以根据实际需求选择使用哪个函数,具体取决于你想要共享结构体实例还是创建新的实例。
相关问题
C# Func
在C#中,Func是一个泛型委托类型,它可以引用一个方法并返回一个指定类型的值。Func类型可以定义多达16个输入参数,其中最后一个参数表示返回值的类型。例如,Func<int, int, string>表示一个具有两个int类型输入参数和一个string类型返回值的方法。
以下是一个示例,演示如何使用Func定义一个方法,并将其传递给另一个方法作为参数:
```
// 定义一个 Func 委托类型
Func<int, int, string> func = (x, y) => (x + y).ToString();
// 将 func 作为参数传递给另一个方法
public void DoSomething(Func<int, int, string> method)
{
int result = method(10, 20);
Console.WriteLine(result);
}
// 调用方法,并将 func 作为参数传递
DoSomething(func);
```
在上面的示例中,我们定义了一个Func类型的委托,它接受两个int类型的参数并返回一个string类型的值。我们将这个委托传递给DoSomething方法,在该方法中调用了传入的委托,并输出结果。
using click = std::function<void(void*)>;的作用
这是一个C++11中的类型别名,它将一个函数类型std::function<void(void*)>定义为一个新的名称click。
这个函数类型的定义表示它是一个可以接受一个void*类型的参数,返回值为空的函数。这个类型别名可以方便地用于定义函数指针或函数对象。
例如,我们可以这样定义一个函数对象myClick,它符合click的函数类型:
```
struct myClick
{
void operator()(void* arg) const
{
// do something with arg
}
};
```
然后我们可以使用myClick对象作为click类型的参数传递给另一个函数:
```
void doSomething(click func)
{
void* arg = ...;
func(arg);
}
int main()
{
myClick c;
doSomething(c); // call c.operator()(arg)
return 0;
}
```
这样就可以方便地实现回调函数等功能。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)