c - char[] 和 &char[] 的区别?

标签 c

<分区>

我试图更好地理解在 API 中使用的 & 运算符(地址)。

这是我的示例 API 函数签名:

apiFunction(const int*)

我正在处理其他人的代码,他们使用的 API 如下:

int inputs[1] = {1};
apiFunction((const int*)&inputs);

我认为正确的用法应该是:

int inputs[1] = {1};
apiFunction(inputs);

当'inputs'是长度为1的字符数组时,'inputs'和'&inputs'之间有区别吗?

当我执行 printf 时它们看起来是一样的,但我担心我可能会错误地格式化它:

printf("%p, %p", inputs, (const int*)&inputs);

输出(例如):

0204DE94 0204DE94

最佳答案

表达式 &input 的类型为 int (*)[1],即指向大小为 1 的数组的指针。这是在与 input 对比,后者(在大多数情况下)衰减为指向第一个元素的指针并且类型为 int *

虽然数组的地址和第一个元素的地址相同,但在应用指针算法时,两者类型的差异就会发挥作用。

在需要 const int *apiFunction 上下文中,您可以通过传递 &input(使用强制转换)或input 因为两者具有相同的值。但是,后者是执行此操作的正确方法:

apiFunction(inputs);

所以您是正确的,您发现的代码没有正确传递参数。

关于c - char[] 和 &char[] 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45619318/

相关文章:

c - 在 C 中使用指针操作二维数组

c - 中断处理程序中的 printk,真的那么糟糕吗?

C语言计算时间

c++ - 我们可以从父进程中读取子进程的环境变量吗

c - 跳出这个 while 循环

c - 使用 fscanf() 从文本文件读取

c - windows 2000平台如何处理win32服务

C 内存地址和值

c++ - 通过安排任务最大化分数

c - 为什么当我第二次运行循环时该程序会崩溃?