作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何将位数组的元素传递给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/
我是一名优秀的程序员,十分优秀!