如何将指针函数abc(x,y)存入数组,解决数组类型表达式赋值报错
问题解决
你收到的error: assignment to expression with array type报错主要来自两处代码错误:
- 你定义的
array2是char基础类型,不是数组,不支持array2[i]这种下标访问写法 abc函数的返回值为char*指针类型,和char类型不匹配,无法直接存入char类型的变量
根据你实际的需求,分两种实现方案:
方案1:存储abc的返回值(char*字符串指针)到数组
如果你需要的是把每次调用abc得到的返回结果存到数组里,直接定义对应类型的指针数组即可:
char *abc(unsigned int a, unsigned int b) { // 注意:此处返回的char*指向的内存必须合法 // 禁止返回函数内部定义的局部栈数组地址,会产生野指针 // 建议返回malloc申请的堆内存、静态字符串或者全局变量地址 // do something here ... } void fun2() { unsigned int x = 5, y = 6; int i; // 定义长度为3的char*类型数组,用于存储abc的返回值 char *array2[3]; for(i = 0; i < 3; i++) { array2[i] = abc(x, y); } // 后续可正常通过array2[n]访问存储的指针 }
方案2:存储abc函数指针本身到数组
如果你需要的是把abc这个函数的地址存到数组里,后续通过数组调用该函数,需要定义对应类型的函数指针数组:
char *abc(unsigned int a, unsigned int b) { // do something here ... } void fun2() { unsigned int x = 5, y = 6; int i; // 定义长度为3的函数指针数组,匹配abc的入参和返回值类型 char* (*func_array[3])(unsigned int, unsigned int); for(i = 0; i < 3; i++) { // 将abc函数的地址存入数组 func_array[i] = abc; } // 调用示例:通过数组下标调用存储的函数 char *ret = func_array[0](x, y); }
内容的提问来源于stack exchange,提问作者typo_code
相关产品推荐
相关产品推荐

