传递给struct地址后获取数组内容

时间:2014-01-22 23:59:28

标签: c arrays pointers struct

鉴于

typedef struct {

    uint32 dataAddress;   

} rsp;

数据数组,例如。 {1,2,3 ...... 10}

uint8 *msg = NULL;

我们将消息数组提供给数据地址

rsp->dataAddress = (uint32) msg; 

我们如何打印?例如:

for (k=0; k < 10; k++)  // message fixed at length 10
    printf("Resultant message = %x", (uint8) rsp->dataAddress[k]);

2 个答案:

答案 0 :(得分:2)

如果要将dataAddress解释为指向uint8数组的指针,则需要强制转换。基本上,演员阵容与您在分配dataAddress时所做的相反。您已制作的演员阵容是uint8*uint32。因此反向投射看起来像这样:

(uint8*)rsp->dataAddress

要访问您编写的数组的元素:

((uint8*)rsp->dataAddress)[k]

我很想知道您为何选择将dataAddress声明为uint32类型。在我看来,将它声明为uint8*并因此避免所有演员阵容更为明智。

答案 1 :(得分:0)

我设法让一些东西运转起来。 谢谢大家。你很棒。

#include <stdint.h>

typedef struct {
 uint32_t dataAddress;
} rsp;

#define LEN 10

void main() {

int i = 0;
uint8_t *msg = NULL;

msg = malloc(sizeof(uint8_t)*LEN);

printf("Init: \n");
for (i=0; i<LEN; i++) {
    msg[i] = i;
    printf("%d ", msg[i]);
}

printf("\n");
printf("Address: 0x%x \n", msg);
printf("Address: 0x%x \n", (uint32_t) msg);

rsp *rsp_ptr;
(rsp_ptr->dataAddress) = (uint32_t) msg;

for (i=0; i < LEN; i++)  // message fixed at length 10
    printf(" %x",  ((uint8_t*) rsp_ptr->dataAddress)[i]);

printf("\n");

}