c - 如何将位数组的元素传递给C中的函数

标签 c function embedded

我想知道如何将位数组的元素传递给C语言的函数。我想通过这个“逻辑”信号来控制函数的执行。 我的想法是,某些函数设置或清除位数组的专用元素,并且此操作会更改我的函数的行为,但我不知道如何声明函数原型(prototype)(我不知道如何告诉编译器该函数需要位数组元素作为他的参数之一)。在 C 语言函数中使用单个位数组元素是否存在任何技巧? 感谢您的任何建议。

最佳答案

听起来您正在寻找使用函数指针的通用解决方案。也就是说,传递一个函数指针来确定要采取的操作。示例:

void bit_change (uint8_t*  arr, 
                 size_t    byte_index,
                 size_t    bit_index, 
                 action_t* action)
{
  arr[byte_index] = action(arr[byte_index], bit_index);
}

其中 action_t 是确定行为的函数类型。现在您可以实现位设置、位清除、位切换、设置所有位等操作。

完整示例:

#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>

typedef uint8_t action_t (uint8_t data, size_t bit);

uint8_t bit_set (uint8_t data, size_t bit)
{
  return (uint8_t) (data | (1u << bit));
}

uint8_t bit_clear (uint8_t data, size_t bit)
{
  return (uint8_t) (data & ~(1u << bit));
}


void bit_change (uint8_t*  arr, 
                 size_t    byte_index,
                 size_t    bit_index, 
                 action_t* action)
{
  arr[byte_index] = action(arr[byte_index], bit_index);
}


void print_array (size_t size, const uint8_t array[size])
{
  for(size_t i=0; i<size; i++)
  {  
    printf("%.2"PRIu8 " ", array[i]);
  }
  printf("\n");
}


int main (void)
{
  uint8_t array [5] = {0};

  bit_change(array, 0, 2, bit_set);
  print_array(sizeof(array), array);

  bit_change(array, 0, 2, bit_clear);
  print_array(sizeof(array), array);

  return 0;
}

关于c - 如何将位数组的元素传递给C中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42153459/

相关文章:

embedded - 用什么来填充可闪烁图像?

embedded - 我应该从哪里开始使用 HDL?

c - 在 C 中使用 getchar()

c++ - 我如何强制cmake在Linux中使用/usr/include中的C++头文件?

swift - (Swift) 在 guard 语句中调用函数

r - 如何根据自定义函数将 NA 去除合并到聚合中?

javascript - 将函数及其参数传递给另一个函数来执行它的语法是什么?

c++ - Placement new,对象放置在 I/O 寄存器和归零内存上

c - Windows 中的混合编程

c - LLVM 即时编译 : how to disable automatic function resolve?