示例:我有一个数组显示函数,它需要一个指针和一个长度。我可以在不创建单独变量的情况下将数字作为参数传递吗?
也许我应该改变print的功能,例如第一个参数:const uint8_t* mass或其他什么?我保证打印功能只会读取值,而不是更改它们!
#include <iostream>
using namespace std;
void print(uint8_t * mass, uint16_t len)
{
uint16_t i;
for (i = 0; i < len; i++)
{
cout << mass[i];
}
cout << endl;
}
int main()
{
print(&((uint8_t)0),1);
return 0;
}
到目前为止我还没有成功,希望对您有所帮助。
由于您使用两个标签进行询问 - C 和 C++,我不会告诉您什么是右值、左值和其他(但我建议您问自己)。
我会问你一个问题 - 只是一个数字是某种值,可以简单地写入到处理器的命令中 - 嗯,例如,
那些。这个零只是不是数据中的字节,而是可执行代码中的字节- 你认为这个位于命令中间的地址可以提供有用的东西吗?鉴于通常禁止访问代码?
或者它可能是处理器寄存器中的一个值——你如何想象它的地址?
再一次,让我们想象一下调用——
f(&1,&1,&1)这三个不同的单元地址还是同一个?因此,在一般情况下 - 不,一个数字的地址通常是无稽之谈。
无论您获得什么作为有效地址,以及以何种方式,它将是一个包含您需要的值的变量,即使它是临时的和未命名的。
非常蹩脚的拐杖:
但我主动不喜欢它:) 而且它肯定不是“数字的地址”,而是另一个函数中静态变量的地址......但是您不必手动创建变量。
另一种选择 - 因为它仍然适合编写附加功能:)
如果数组由单字节值组成,那么您可以传递字符串而不是字符:https ://ideone.com/hP60jc
我得到了某种拐杖,但我不知道这样做有多正确,以及它是否会导致 UB。我还注意为了
const与被调用函数的兼容性而删除的内容,这是不值得做的。如果函数不改变数据,它的参数必须已经用修饰符声明了const,如果是这样,为什么要害怕传递一个指向右值的指针呢?https://ideone.com/UTkkzK