【发布时间】:2019-05-23 13:57:14
【问题描述】:
我有一个函数定义如下:
void foo(uint8_t *val, int num)
{
for(int i=0;i<num;i++)
printf("Buffer[%i]=0x%X \n",i,val[i]);
}
作为一个全局变量,我有一个数组声明为:
uint8_t Buffer[4] = {0x01, 0x02, 0x03, 0x04};
所以为了打印缓冲区,我执行以下操作:
int main()
{
foo(Buffer,4);
return 0;
}
结果如下:
Buffer[0]=0x1
Buffer[1]=0x2
Buffer[2]=0x3
Buffer[3]=0x4
问题是,对于特定情况,我只需要向该函数发送一个 uint8_t 参数来替换缓冲区,因此我将其实现为:
int main()
{
uint8_t READ_VAL[] = {0x01};
foo(READ_VAL,1);
return 0;
}
无论如何,有什么办法可以内联吗?我试着这样做
foo((uint8_t *)0x01,1);
但它不工作(给我分段错误错误)。知道我该怎么做吗?
【问题讨论】:
-
你似乎在寻找的东西叫做compound literals。
-
如果你只有 1 个值,为什么不直接用 printf 替换函数调用呢?
-
我只是将我的案例简化为这个简单的 printf 案例来重现我的问题,但实际上这不是一个选择。 @Lundin
-
确实,这正是我所需要的。谢谢! @some-programmer-dude
标签: c pointers formatting