您不能直接分配數組,因此創建數組複合文字沒有幫助。但是,結構中的數組可以通過複合文字分配。因此,你可以考慮使用:
struct FloatArray
{
float verticies[14][3];
};
struct FloatArray vertices;
float (*verticies)[3] = vertices.verticies;
extern void init_mod(void);
void init_mod(void)
{
vertices = (struct FloatArray){
.verticies =
{
{-0.5,-0.5, 0.5},
{ 0.5,-0.5, 0.5},
{-0.5, 0.5, 0.5},
{ 0.5, 0.5, 0.5},
{-0.5, 0.5,-0.5},
{ 0.5, 0.5,-0.5},
{-0.5,-0.5,-0.5},
{ 0.5,-0.5,-0.5},
{ 0.5, 0.5, 0.5},
{ 0.5,-0.5, 0.5},
{-0.5,-0.5,-0.5},
{-0.5,-0.5, 0.5},
{-0.5, 0.5,-0.5},
{-0.5, 0.5, 0.5},
}
};
}
該代碼利用你的vertices
拼寫錯誤,並讓你的現有代碼不變,儘管全球verticies
的類型已經改變的指針數組。函數內部的代碼使用複合文字來初始化結構,它具有初始化指針所指向的數組的(有益的)副作用。
此代碼GCC 4.8.2下完全編譯在Mac OS X 10.9.2小牛用命令行:
gcc -g -O3 -std=c99 -Wall -Wextra -Werror -c crazy.c
我假設初始化功能是需要前到陣列重置到已知狀態一些使用和修改數組的代碼的下一次迭代的開始。如果你只需要在程序啓動時初始化一次數組,那麼你用一個簡單的數組初始值設定項來做不同的事情。但似乎你可能已經知道這一點。
而這段代碼演示了等價性。數組old_vertices
對應於您對verticies
的定義,但被初始化(一次)。
#include <stdio.h>
float old_vertices[14][3] =
{
{-0.5,-0.5, 0.5},
{ 0.5,-0.5, 0.5},
{-0.5, 0.5, 0.5},
{ 0.5, 0.5, 0.5},
{-0.5, 0.5,-0.5},
{ 0.5, 0.5,-0.5},
{-0.5,-0.5,-0.5},
{ 0.5,-0.5,-0.5},
{ 0.5, 0.5, 0.5},
{ 0.5,-0.5, 0.5},
{-0.5,-0.5,-0.5},
{-0.5,-0.5, 0.5},
{-0.5, 0.5,-0.5},
{-0.5, 0.5, 0.5},
};
struct FloatArray
{
float verticies[14][3];
};
struct FloatArray vertices;
float (*verticies)[3] = vertices.verticies;
extern void init_mod(void);
void init_mod(void)
{
vertices = (struct FloatArray){
.verticies =
{
{-0.5,-0.5, 0.5},
{ 0.5,-0.5, 0.5},
{-0.5, 0.5, 0.5},
{ 0.5, 0.5, 0.5},
{-0.5, 0.5,-0.5},
{ 0.5, 0.5,-0.5},
{-0.5,-0.5,-0.5},
{ 0.5,-0.5,-0.5},
{ 0.5, 0.5, 0.5},
{ 0.5,-0.5, 0.5},
{-0.5,-0.5,-0.5},
{-0.5,-0.5, 0.5},
{-0.5, 0.5,-0.5},
{-0.5, 0.5, 0.5},
}
};
}
int main(void)
{
init_mod();
double old_sum = 0.0;
double sum = 0.0;
for (int i = 0; i < 14; i++)
{
for (int j = 0; j < 3; j++)
{
old_vertices[i][j] *= (i * 14 + j);
old_sum += old_vertices[i][j];
verticies[i][j] *= (i * 14 + j);
sum += verticies[i][j];
}
}
printf("%f == %f\n", old_sum, sum);
return 0;
}
你得到了這個錯誤,因爲你不能指定這樣的值,你必須做它的元素。你唯一可以做到這一點的是,如果你在聲明它時初始化變量。 – Mike
你在調用函數還是試圖定義它? – ArthurChamz