Pointer to array of pointer

Started by firmware.c, June 14, 2018, 09:18:52 PM

Previous topic - Next topic

firmware.c

ห่างหายจากการ post ลงเว็บบอร์ดไปซะนาน พอดีวันนี้ผมมีงานที่จำเป็นจะต้องใช้ Pointer to array of pointer ซึ่งตอนแรกก็ไม่คิดว่าจะต้องใช้มัน เลยอยากเอามาแชร์เผื่อมีใครจำเป็นต้องนำไปใช้หรือนึกไม่ออกว่าทำไมต้องใช้มัน

ตามปกติโดยทั่งไปแล้วหากเราต้องการอ่านค่าจาก array of pointer ก็สามารถทำได้ง่ายๆจาก code ด้านล่าง

const unsigned char *pTable1[] = {
&data4,
&data3,
&data2,
&data1,
};
const unsigned char *pTable2[] = {
&data10,
&data9,
&data8,
&data7,
&data6,
&data5,
};

TestRead = *pTable1[0];

TestRead = *pTable2[0];


แต่ปัญหาของผมก็คือผมจำเป็นที่จะต้องทำให้ code ในการอ่านค่าจาก array of pointer ของ pTable1 และ pTable2 นั้น common กันโดยเลือกจากตัวแปรว่าจะอ่านค่าจาก pTable1 หรือ pTable2

พยายามอยู่นานจึงนึกออกขึ้นว่าน่าจะต้องใช้ Pointer to array of pointer ซึง code สำหรับทดสอบก็ตามด้านล่างครับ

// Test pointer to array of pointer by firmware.c

#include <avr/io.h>

unsigned char data1 = 1;
unsigned char data2 = 2;
unsigned char data3 = 3;
unsigned char data4 = 4;

unsigned char data5 = 5;
unsigned char data6 = 6;
unsigned char data7 = 7;
unsigned char data8 = 8;
unsigned char data9 = 9;
unsigned char data10 = 10;

const unsigned char *pTable1[] = {
&data4,
&data3,
&data2,
&data1,
};
const unsigned char *pTable2[] = {
&data10,
&data9,
&data8,
&data7,
&data6,
&data5,
};
unsigned char SelectTable;
unsigned char TestRead;
unsigned char ReadCount;

unsigned char **LpSelectTable; // pointer to array of pointer
unsigned char Counter;

int main(void)
{


    while(1)
    {
if (SelectTable == 0) {
LpSelectTable = (unsigned char **)&pTable1;
ReadCount = sizeof(pTable1)/sizeof(pTable1[0]);
} else {
LpSelectTable = (unsigned char **)&pTable2;
ReadCount = sizeof(pTable2)/sizeof(pTable2[0]);
}

                // common code area to read array of pointer pTable1 or pTable2
Counter = 0;
do {
TestRead = **(LpSelectTable+Counter);
PORTB = TestRead;
} while (++Counter < ReadCount);
    }
}

IAR Embedded Workbench for ARM
AVR-Studio + AVR-GCC
CodeBlocks + MinGw
CodeBlocks + Gtk+

Gustaafas

The study has been made of this knowledge to study it failed to look elsewhere anymore.