我有一组数组:msg1[]
msg2[]
.... msgn[]
。我需要使用while
循环中的值。作为msgi[]
。当我将它定义为#define MSG(a) msg##a
并将其放在一个循环中并增量为i
时,它将其展开为msgi
?使用变量递增的变量粘贴令牌
回答
你不能那样做。相反,您可以创建一个新阵列,其中包含指向实际阵列的指针:
int array1[...];
int array2[...];
int *all_arrays[] = { array1, array2 };
我确实尝试过这种方式,但仍然一直说'array1''array2' ..没有定义。我不知道为什么。 – umayneverknow 2013-04-25 14:06:27
@ ad3我的例子就是这个例子。这只是表明了原则。你必须调整它来处理你的代码,你的数组和你的类型。 – 2013-04-25 14:08:19
对不起!得到它了。非常感谢! – umayneverknow 2013-04-25 14:12:01
建立与gcc -E myfile.c
C代码,你会看到的原因
这个叫预处理程序代码。预处理器代码是编译器在编译之前生成的代码。在这段代码中,编译器用宏的内容替换源代码中的宏。
您的产地代码:
for (i=0; i<10; i++) {
for (j=0; j<10; j++)
MSG(i)[j] = 3;
}
从产地代码生成preprocessr代码(可以用gcc -E
可见):
for (i=0; i<10; i++) {
for (j=0; j<10; j++)
msgi[j] = 3;
}
您可以使用二维阵列代替
int msg[5][5];
我得到了为什么我的代码不起作用。谢谢! – umayneverknow 2013-04-25 14:12:24
当我将其定义为#define MS G(a)msg ## a并将其放入一个循环中,然后增加i,它将其展开为msgi?
不,它不会以这种方式工作,因为宏在编译之前被展开,而不是在之后。你需要一个不同的方法,比如@zakinster建议的二维数组。
不,不幸的是它不会。 C不支持运行时名称查找。相反,你应该使用形式的二维数组:
void** msg;
这将允许阵列具有不同的尺寸和类型的,虽然你将不得不转换为任何类型的数组。
它不能这样做的原因宏在编译时更换不是运行,所以它会更换一次......
你可以做的是使用二维数组是否有相同的大小或使用如果存在不同大小的阵列阵列:
//once in your code you need to do this:
int array0[];
int array1[];
//...
int arrayX[]; //X should be replaced with a real number...
int **arrayOfArrays = new (int*)[X+1];
arrayOfArrays[0] = array0;
arrayOfArrays[1] = array1;
//...
arrayOfArrays[X] = arrayX;
//now you could use it like that anytime in your code:
int i;
for(i = 0; i < X; ++i)
{
//Do whatever you want to do, like:
arrayOfArrays[i][0] = 1234;
}
- 1. 使用变量复制粘贴表
- 2. 递增变量
- 3. 递增变量
- 4. 将变量粘贴到$ _GET
- 5. 壳牌:如何递增一个变量
- 6. 批量变量不递增!
- 7. 递增$ _ GET变量
- 8. 增量式粘贴插件?
- 9. 用户变量不递增
- 10. 在Bash -sed命令中递增变量
- 11. 递增变量的名称
- 12. 使用foreach循环递增变量
- 13. 使用线程递增静态变量
- 14. 粘贴变量值图片src
- 15. 整数变量不递增
- 16. 递增非线性变量
- 17. SimpleXML中递增变量
- 18. Android - 递增全局变量
- 19. Javascript不会递增变量
- 20. jQuery - 变量递增+1
- 21. 粘贴参考中的行增量
- 22. 需要使用R粘贴打印变量的值
- 23. 使用R中的粘贴功能计算变量值
- 24. 增量变量为
- 25. VBA - 复制并粘贴增量
- 26. 使用增量变量初始化
- 27. 变量作为令牌的for循环
- 28. 变量值内的意外令牌
- 29. Javascript变量意外的令牌>
- 30. 意外的令牌变量名
为什么不使用二维数组? – zakinster 2013-04-25 13:52:19
因为数组都是不同的大小和类型。 – umayneverknow 2013-04-25 13:53:00
不同的尺寸是没有问题的,不同的类型..以及你会在那里举办派对... – 2013-04-25 14:21:35