不受約束的浮動陣列I由一個typedef浮法陣列,這樣的:的typedef用C
typedef float fooType[];
所以,我可以聲明和靜態初始化浮陣列是這樣的:
fooType myArray = {1.0, 2.0, 3.0}
該工程精細。我可以說myArray[2]
沒有問題,並且通常按照我的意願使用我的fooType
。在我的程序的情況下這是非常清楚,fooType
是一個數組類型(它實際上是一個巨大的查找表),這就是爲什麼我不是簡單地做typedef float fooType
。
我該如何聲明並使用變量指向bar
並訪問bar
的元素?我不能聲明這樣一個簡單的變量:
fooType bar = myArray;
由於錯誤與invalid initializer
;由於編譯器不知道要分配多少內存,我沒有想到它能夠工作。我試着用指針的幾件事情:
fooType *bar = myArray;
這給出了一個警告:當我訪問的元素與bar[1]
initialization from incompatible pointer type
和錯誤。這個聲明很好,因爲我期望它,因爲現在類型匹配:
fooType *bar = &myArray;
但是,如上所述編譯器錯誤與invalid use of array with unspecified bounds
當我說bar[1]
。
這工作:
float *bar = myArray;
float val = bar[3];
但我不希望因爲我失去了我的typedef的可讀性。
我一直埋藏在一個可愛OO世界(Java)的很長一段時間,所以我希望從這個理解用C在這種情況下什麼是習慣。如果沒有直接的解決方案,我已經準備好更改我使用typedef以適合約定。雖然我有一種感覺,但並不複雜。
感謝
底線是你不**要爲數組進行typedef ...你可以,但是你會面對所有這些「麻煩」。例如這個東西'fooType myArray = {1.0,2.0,3.0}; fooType bar = myArray;'''float myArray [] = {1.0,2.0,3.0}; float bar [] = myArray;'它是否可讀? :)另一個「難題」是當你定義一個函數原型,它將'fooType'作爲_output_參數。 (類似於'memset'等) – debleek63
現在很清楚@debleek63。謝謝。 –