2017-02-10 3 views
0

Я хотел бы знать, как передать элемент бит-массива в функцию на языке C. Я хочу контролировать выполнение функции с помощью этого «логического» сигнала. Моя идея в том, что некоторые функции устанавливают или очищают выделенный элемент битового массива, и это действие меняет поведение моей функции, но я не знаю, как объявить прототип функции (я не могу сказать, компилятор, который функция ожидает бит в качестве одного из его аргументов). Есть ли когда-либо какой-либо трюк, как использовать отдельные элементы массива бит в функции языка C? Спасибо за любые предложения.Как передать элемент битового массива в функцию в C

+0

использовать массив 'Foo' в функции, вы всегда можете вызовите 'my_function (foo * my_foo)', а затем получите или установите 'my_foo [x]' в пределах тела вашей функции. –

+0

Сколько бит в вашем битовом массиве? – technosaurus

+1

Вы не можете передать индивидуальный «элемент бит-массива», поскольку это будет немного. Вы можете передать целое число. Если бит больше, чем в одном целочисленном, вы можете передать указатель на целочисленный массив. Функция должна выполнять декодирование бит («логика»). –

ответ

0

Похоже, вы ищете какое-то общее решение, используя указатели на функции. То есть, передайте указатель функции, который определяет действие, которое нужно предпринять. Пример:

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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^