我正在努力更好地理解&操作符(地址-of),以便在API中使用。
下面是我的API函数签名示例:
apiFunction(const int*)我正在处理其他人的代码,他们正在使用API,如下所示:
int inputs[1] = {1};
apiFunction((const int*)&inputs);我认为正确的用法应该是:
int inputs[1] = {1};
apiFunction(inputs);当“输入”是长度为1的字符数组时,“输入”和“&inputs”之间是否有区别?
当我做printf时,它们看起来是一样的,但我担心可能是格式化错误:
printf("%p, %p", inputs, (const int*)&inputs);产出(例如):
0204DE94 0204DE94发布于 2017-08-10 16:54:42
表达式&input具有int (*)[1]类型,即指向大小为1的数组的指针。这与input相反,后者(在大多数上下文中)衰变为指向第一个元素的指针,并具有int *类型。
虽然数组的地址和第一个元素的地址是相同的,但是当应用指针算法时,每个元素的类型的差异就会起作用。
在apiFunction的上下文中,您可以通过传递&input (使用强制转换)或input,因为两者都具有相同的值,这样就可以避免传递&input。然而,后者是这样做的适当方式:
apiFunction(inputs);因此,您发现的代码没有正确地传递参数是正确的。
https://stackoverflow.com/questions/45619318
复制相似问题