gpt4 book ai didi

c - 无法在 C 中使用指针数组

转载 作者:行者123 更新时间:2023-12-02 00:52:26 27 4
gpt4 key购买 nike

我正在尝试创建一个指针数组,用作不同数据类型的数组。

在这里,我创建了数组 arr保存 5 个指针,每个指针指向一个不同的变量。 a是一个 int , bfloat , cchar , dstring , funfunction .

#include <stdio.h>
#include <float.h>
#include <string.h>

void fun(){
printf("this is a test function");
}

int main() {
int *arr[5];
int a = 10;
float b = 3.14;
char c = 'z';
char d[] = "hello";
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
arr[3] = &d;
arr[4] = &fun;

printf("a : %d\n", *arr[0]);
printf("b : %d\n", *arr[1]);
printf("c : %d\n", *arr[2]);
printf("d : %d\n", *arr[3]);
*arr[4];

return 0;
}

我试图让它打印出 a 的值, b , c , 和 d , 然后执行函数 fun .但是,我收到如下错误:

warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
arr[1] = &b;

arr[1] , arr[2] , arr[3] , 和 arr[4] .

澄清:我正在尝试制作一个数组(或者,在到目前为止的所有评论和答案之后,一个对象类型,如 struct 或 union)能够保存不同数据类型的对象,包括变量、函数、结构等。数据假设类型是已知的。我只是想存储不同的数据类型并在 1 个对象(如数组)中使用它们。

最佳答案

这是你需要做的:

#include <stdio.h>
#include <float.h>
#include <string.h>

void fun(){
printf("this is a test function");
}

int main() {
void *arr[5];
int a = 10;
float b = 3.14;
char c = 'z';
char d[] = "hello";
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
arr[3] = &d;
arr[4] = fun;

printf("a : %d\n", *((int *) arr[0]));
printf("b : %f\n", *((float *) arr[1]));
printf("c : %c\n", *((char *) arr[2]));
printf("d : %s\n", (char *) arr[3]);

void (*f)() = arr[4];
f();

return 0;
}

arr5 指向 void(或任何东西)的指针的数组。在打印元素时,您必须将它们转换为它们实际的类型。例如,arr[3] 是一个指向数组的指针(因为您获取的是 d 的地址)。由于第一个元素的地址与数组的开头相同,我们可以在打印前将其转换为指向 char 的指针。

对于函数(请注意,只需使用 fun 即可为您提供函数的地址),我已将地址分配给 f,它是指向函数的指针接受未指定的 arg 列表并返回 void。然后你可以调用 f()

这就是要点。阅读 good book获取更多信息。

关于c - 无法在 C 中使用指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56574519/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com