我要动态定义和分配指针:
#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);
}
}
但是当我编译它时,会出现很多错误。有人可以帮忙解决吗?
答案 0 :(得分:3)
您无法做您想做的事情。预处理器宏在编译时进行扩展,它们不能依赖于运行时变量值。所以
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 *));
}
答案 1 :(得分:0)
如果假设ww
代表10个数组,每个数组包含100个浮点数(在编译时为已知数字),则只需使用多维数组:
float ww[10][100];
,并在使用时相应地建立索引(例如:ww[7][93] = 6;
)。
如果'ww' 必须 如您所说包含动态分配的指针,则使用(其中每个元素都是指向100个浮点数的数组的指针)
float (*ww[10]) [100];
for (i=0;i<10;i++){
ww[i]=malloc(sizeof(float)*100);
}
,并在使用时相应地进行索引(例如:(*(ww[7]))[93] = 6;
或ww[7]->[93] = 6;
)。
记住在完成后释放它们。
for (i=0;i<10;i++){
free(ww[i]);
}
注意 :请记住,malloc
不会初始化新分配的内存-这取决于您!强烈建议使用calloc
而不是将内存清零,使其处于已知状态。