C/C++参数中的_In_和_Out_代表什么

最近看方法参数中的疑惑

1
2
3
sai_status_t sai_api_query(_In_ sai_api_t sai_api_id, _Out_ void** api_method_table)
{
}

_In_和_Out_是用于标记参数的传递方式的注解。它们并不是C\C++语言的关键字,而是一种约定俗成的注释方式,用于提示函数的调用者和阅读者关于参数的特性。

_In_表示该参数是输入参数,即函数内部会读取参数的值,但不会修改它。通过这个标记,我们可以清楚地知道该参数在函数内部只被用于读取数据。

_Out_表示该参数是输出参数,即函数内部会修改参数的值,并将修改后的结果返回给调用者。通过这个标记,我们可以清楚地知道该参数在函数内部会被修改,我们在调用函数时需要确认传入的参数具备存储修改后结果的能力。

总结起来,_In_和_Out_这两个标记主要用于提供参数的传递方式的额外信息,帮助理解函数的行为和外部变量的使用。

上面的**又是什么意思呢?

&& 和 & 是 C++ 中的运算符, 和 * 是 C++ 中的指针。&& 和 & 表示引用和取地址, 和 * 表示指针的指针和指针。

&& 和 & 的区别

特性 && &
定义 引用 取地址
用途 指向变量 获取变量的地址
实现 可以用来避免值传递造成的副本开销 可以用来访问变量的值

* 的区别

特性 ** *
定义 指针的指针 指针
用途 存储另一个指针的地址 存储变量的地址
实现 可以用来实现链表、树等数据结构 可以用来访问变量的值

示例

C++

1
2
3
4
5
6
7
8
// && 和 &
int x = 10;
int &y = x;
int *p = &x;

// ** 和 *
int *p1 = new int(10);
int **pp = &p1;

请谨慎使用代码。了解详情

content_copy

在这种情况下,y 是一个引用,它指向变量 xp 是一个指针,它指向变量 x 的地址。p1 是一个指针,它指向一个整数。pp 是一个指针,它指向一个指针,该指针指向一个整数。

结论

&& 和 & 表示引用和取地址,* 表示指针的指针和指针。

总结

* 在 C 和 C++ 中的区别在于:

  • ** 在 C 中表示指针的指针,在 C++ 中表示指针。
  • ** 在 C 中可以用来存储另一个指针的地址,在 C++ 中可以用来存储变量的地址。

因此,&& 和 & 在 C 和 C++ 中都是可用的,意思也完全相同。* 在 C 中也可以使用,但意思与 C++ 中的意思有所不同。