以下是C中的等价词吗?

区别只在最后一行(AnyFunction).

A

static void AnyFunction(unsigned char *array);
unsigned char array[32] = "";

AnyFunction(array);

B

static void AnyFunction(unsigned char *array);
unsigned char array[32] = "";

AnyFunction(*&array);

C

static void AnyFunction(unsigned char *array);
unsigned char array[32] = "";

AnyFunction(&array[0]);

如果其中任何一个是等价的,那么同样的情况是否适用于C++?

请参见上面示例的问题和代码.

推荐答案

最终的结果是相同的,尽管它们各自实现的方式略有不同.

在第一种情况下:

AnyFunction(array);

当传递给函数时,array衰减为指向其第一个成员的指针,特别是从类型unsigned char [32]unsigned char *,它与函数预期的类型匹配.

在第二种情况下:

AnyFunction(*&array);

获取地址array,给出一个类型为unsigned char (*)[32]的表达式,即指向数组的指针,然后*运算符解引用该指针,得到一个类型为unsigned char [32]的数组表达式.然后,与第一种情况一样,该数组衰减为指向其第一个元素的指针.

在最后一种情况下:

AnyFunction(&array[0]);

数组索引操作符给我们一个左值,它是数组的第一个元素,&操作符给我们那个元素的地址,结果被传递给函数.

在这三种情况下,都会向函数传递一个指向array的第一个元素的指针.

C++相关问答推荐

为什么静态说明符为内联函数生成外部定义?

intellisense不工作,甚至已经下载了c/c++扩展

错误:C中需要参数声明符

getchar读css + z还是返回css?

在使用GTK 4 Columnview列表模型时,如何为多列添加排序函数.C编码,Linux/GNOME环境

返回一个包含数组的 struct

为什么GCC在每次循环迭代时都会生成一个数组的mov&S使用[]访问数组?(-03,x86)

在c++中使用堆栈的有效括号

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

如何识别Linux中USB集线器(根)和连接到集线器(根设备)的设备(子设备)?

防止规范模式在C++中 echo 特殊字符

在另一个函数中使用realloc和指针指向指针

判断系统命令返回值的正确方法

如何对现有的双向循环链表进行排序?

为什么我的二叉树删除删除整个左部分的树?

OMP并行嵌套循环

C中的空指针是什么(_N)?

可以';t从A9G模块拨打电话

共享内存未授予父进程权限

多行表达式:C 编译器如何处理换行符?