c++ - 动态更改指向结构的指针数组的数据类型

标签 c++ c arrays pointers struct

我正在尝试编写来自结构的变量指针数组。我的问题是结构内的变量具有不同的数据类型。

#include "stdlib.h"

typedef struct val {
 unsigned char a;
 unsigned char b;
 unsigned short c;
 unsigned int d;
} _letters;

void setup() {
 Serial.begin(9600);
}

int var1 = 0;

void loop() {
 _letters lt;
 lt.a = 1;
 lt.b = 2;
 lt.c = 3;
 lt.d = 4;

 unsigned char *ptrLetters[4];
 ptrLetters[0] = &lt.a;
 ptrLetters[1] = &lt.b;
 ptrLetters[2] = &lt.c;   //here is the problem
 ptrLetters[3] = &lt.d;  //also here

 var1 = (int)*ptrLetters[0];

 Serial.println(var1);
}

这样做的目的是因为我想保存地址并通过数组的索引(*ptrLetters[index])从结构(我不能修改)访问变量,但问题是里面该结构有不同的数据类型,指针仅为 char 类型初始化。 我该如何动态更改它?

最佳答案

Pointer to object of any type can be implicitly converted to pointer to void (optionally cv-qualified); the pointer value is unchanged. The reverse conversion, which requires static_cast or explicit cast, yields the original pointer value:

void *ptrLetters[4];
ptrLetters[0] = &lt.a;
ptrLetters[1] = &lt.b;
ptrLetters[2] = &lt.c;   //no more problem
ptrLetters[3] = &lt.d;  //no more problem here as well

对于取消引用,在 C 中你可以简单地这样做:

unsigned char var1 = *((char*)ptrLetters[0]);
unsigned char var2 = *((char*)ptrLetters[1]);
unsigned short var3 = *((unsigned short*)ptrLetters[2]);
unsigned int var4 = *((unsigned int*)ptrLetters[3]);

因为你也用 C++ 标记了它,所以最好在 C++ 中使用 static_cast

unsigned char var1 = *(static_cast<unsigned char*>(ptrLetters[0]));
unsigned char var2 = *(static_cast<unsigned char*>(ptrLetters[1]));
unsigned short var3 = *(static_cast<unsigned short*>(ptrLetters[2]));
unsigned int var4 = *(static_cast<unsigned int*>(ptrLetters[3]));

关于c++ - 动态更改指向结构的指针数组的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53316237/

相关文章:

arrays - 如何动态分配数组的大小?

c++ - 使用 g++ 预处理器检测 size_t 是否内置

arrays - 从 C 中的数组中删除给定数字的所有出现

c - 打印不常见的字符?

javascript - 访问存储在 Javascript 数组中的对象

c - printf %i 在这种情况下如何工作?

c++ - 是否可以引用随机类?

c++ - 什么是 check_union256d?

c++ - 将指针传递给函数时出现 "expected primary-expression before"错误

C 中的 char 数组打印错误值