首页 > 解决方案 > 动态定义和分配指针

问题描述

我想动态定义和分配指针:

#include<stdio.h>
#define def_var(type,name,i) type name##i
#define var(name,i) name##i
void main(){
  int i;
  for (i=0;i<10;i++){
    def_var(float,*ww,i)=NULL;
  }
  for (i=0;i<10;i++){
    var(ww,i)=(float *)malloc(100);
  }
}

但是当我编译它时,会出现很多错误。有人可以帮忙解决吗?

标签: cpointersmacros

解决方案


你不能做你想做的事。预处理器宏在编译时扩展,它们不能依赖于运行时变量值。所以

def_var(float,*ww,i)=NULL;

扩展为

float *wwi = NULL;

它不会也不能用i变量的值替换,它只是执行文本替换。

此外,变量声明具有块作用域,因此循环内声明的任何变量for都会在循环结束时消失。

只需声明一个指针数组。

float *ww[10];
for (int i = 0; i < 10; i++) {
    ww[i] = malloc(100 * sizeof(float *));
}

推荐阅读