Saturday, May 2, 2015

Đối với Array đã được đề cập, để truy cập các phần tử cụ thể trong mảng thì cần phải nhớ vị trí của phần tử đó trong mảng. Phần này sẽ đề cập đến vấn đề làm thế nào để truy cập một phần tử cụ thể trong mảng theo ID (enum) một các dễ dàng.

1. Array
array-enum.c

 #include <stdio.h>  
   
 enum {  
   COLOR_REG = 0,  
   COLOR_GREEN,  
   COLOR_BLUE  
 };  
   
 typedef struct{  
   char name_color[32];  
   int r;  
   int g;  
   int b;  
 }color_t;  
   
 color_t mycolor[] = {  
   [COLOR_BLUE] = {"blue", 0, 0, 255},  
   [COLOR_REG] = {"reg", 255, 0, 0},  
   [COLOR_GREEN] = {"green", 0, 255, 0},  
 };  
   
 void print_color(int color){  
   printf("color<%s>: r = %d, g = %d, b = %d \n",  
       mycolor[color].name_color,  
       mycolor[color].r,  
       mycolor[color].g,  
       mycolor[color].b  
       );  
 }  
   
 int main(int argc, char **argv)  
 {  
   
   print_color(COLOR_REG);  
   print_color(COLOR_GREEN);  
   print_color(COLOR_BLUE);  
   
   return 0;  
 }       
   

Compile & Execute
 $ gcc array-enum.c   
 $ ./a.out   
 color<reg>: r = 255, g = 0, b = 0   
 color<green>: r = 0, g = 255, b = 0   
 color<blue>: r = 0, g = 0, b = 255  

Như ví dụ trên, mảng mycolor[] có các phần tử được khai báo theo các ID đặt trong [ ], giá trị các field đặt trong { }, không cần quan tâm thứ tự của các phần tử trong mảng, các khai báo dưới đây là tương đương:

 color_t mycolor[] = {  
   [COLOR_BLUE] = {"blue", 0, 0, 255},  
   [COLOR_REG] = {"reg", 255, 0, 0},  
   [COLOR_GREEN] = {"green", 0, 255, 0},  
 }; 

 color_t mycolor[] = {  
   [COLOR_REG] = {"reg", 255, 0, 0},  
   [COLOR_BLUE] = {"blue", 0, 0, 255},  
   [COLOR_GREEN] = {"green", 0, 255, 0},  
 };

 color_t mycolor[] = {  
   [COLOR_GREEN] = {"green", 0, 255, 0},  
   [COLOR_BLUE] = {"blue", 0, 0, 255},  
   [COLOR_REG] = {"reg", 255, 0, 0},  
 };   

Truy cập phần tử mảng theo ID
 mycolor[COLOR_REG]  
 mycolor[COLOR_GREEN]  
 mycolor[COLOR_BLUE]  

2. map (C++)
Trong C++ cũng có cách để truy cập phần tử trong mảng bằng ID, được định nghĩa trong map containers, xem chi tiết tại đây.

Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -