答案很簡單:聲明一個數組,而不是作爲int n[10]
。
先進的答案:它似乎並沒有在這裏是如此,但在你需要使用的數組項個別變量名,不管出於什麼原因的情況下,你可以使用一個聯盟:
typedef union
{
struct
{
int n0;
int n1;
int n2;
... // and so on
int n9;
};
int array[10];
} my_array_t;
如果你有一個古老的恐龍編譯器,然後用一個變量名聲明結構如struct { ... } s;
如何在實際的,現實世界的p使用上述類型rogram:
my_array_t arr = {0};
for(int i=0; i<10; i++)
{
arr.array[i] = i + 1;
}
// access array items by name:
printf("n0 %d\n", arr.n0); // prints n0 1
printf("n1 %d\n", arr.n1); // prints n1 2
或者,您可以初始化成員的名字:
my_array_t arr =
{
.n0 = 1,
.n1 = 2,
...
};
傻,如何使用上述類型賦值給變量,而無需使用數組人工例子符號:
my_array_t arr = {0};
// BAD CODE, do not do things like this in the real world:
// we can't use int* because that would violate the aliasing rule, therefore:
char* dodge_strict_aliasing = (void*)&arr;
// ensure no struct padding:
static_assert(sizeof(my_array_t) == sizeof(int[10]), "bleh");
for(int i=0; i<10; i++)
{
*((int*)dodge_strict_aliasing) = i + 1;
dodge_strict_aliasing += sizeof(int);
}
printf("n0 %d\n", arr.n0); // prints n0 1
printf("n1 %d\n", arr.n1); // prints n1 2
for(int i=0; i<10; i++)
{
printf("%d ",arr.array[i]); // prints 1 2 3 4 5 6 7 8 9 10
}
我不明白問題 – StarShine
你不需要一個循環來訪問**命名的**變量 – mathematician1975
我想用循環做到這一點,如果有可能的話 –