如何将未知类型的指针传递给函数?

问题描述 投票:0回答:2

我想按值传递一个变量(我使用指针只是为了避免给参数指定类型)到一个函数中,以便它可以被其中包含的另一个函数使用。内部函数可以被赋予任何类型的变量。

我已经尝试过使用通用指针(void *),但它告诉我“‘void *’不是指向对象类型的指针”。我不想强制转换指针,因为使用指针的全部意义在于它是通用的。

void print_string(char *string, void *variable) {
  Serial.print(string);
  Serial.print(": ");
  Serial.print(*variable); # This takes a variable of any type (int, float, double, char *);
  Serial.println();
}

我希望能够提供 int、double、float 或 string (char*)。

c function pointers
2个回答
3
投票

答案是,尽管你不愿意,但你必须施放它。您试图取消引用指向某个内存位置的指针,但是当该信息为

void *
时,您没有向编译器提供任何有关该信息大小的信息,因此它无法将其转换为正确的程序集访问该内存的指令。


0
投票

你必须知道类型,你可以这样做:

  enum DataType{
    TYPE_FLOAT,
    TYPE_U32,
    TYPE_I32,
  }
  
  void print_string(char *string, void *variable, DataType type) {
  Serial.print(string);
  Serial.print(": ");
  
  switch(type) {
     case TYPE_I32:
     Serial.print(*(int32_t *)variable);
     break;

     case TYPE_U32:
     Serial.print(*(uint32_t *)variable);
     break;
  }
  Serial.println();
}

uint32_t data = 1234;
print_string("hello", &data, TYPE_U32);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.