tôi đã thực hiện một typedef cho mảng float, như thế này:typedef một mảng phao không bị giới hạn trong C
typedef float fooType[];
Vì vậy mà tôi có thể tuyên bố và khởi mảng float tĩnh như thế này:
fooType myArray = {1.0, 2.0, 3.0}
đó làm việc khỏe. Tôi có thể nói myArray[2]
không có vấn đề gì và thường sử dụng số fooType
như tôi muốn. Trong bối cảnh của chương trình của tôi nó rất rõ ràng rằng fooType
là một loại mảng (nó thực sự là một bảng tra cứu khổng lồ) đó là lý do tại sao tôi không chỉ đơn giản là làm typedef float fooType
.
Làm cách nào để khai báo và sử dụng biến để trỏ đến bar
và truy cập các yếu tố của bar
? Tôi không thể khai báo một biến đơn giản như thế này:
fooType bar = myArray;
Vì lỗi đó với invalid initializer
; Tôi không mong đợi nó làm việc vì trình biên dịch không biết có bao nhiêu bộ nhớ để cấp phát. Tôi đã thử một vài điều với con trỏ:
fooType *bar = myArray;
này đưa ra một cảnh báo: initialization from incompatible pointer type
và các lỗi khi tôi truy cập vào các yếu tố với bar[1]
.. này tuyên bố tốt, như tôi mong đợi nó đến từ các loại phù hợp với bây giờ:
fooType *bar = &myArray;
Nhưng như trên các lỗi trình biên dịch với số invalid use of array with unspecified bounds
khi tôi nói bar[1]
.
này hoạt động:
float *bar = myArray;
float val = bar[3];
Nhưng tôi không muốn vì tôi đã làm mất khả năng đọc typedef tôi.
Tôi đã được chôn trong một thời gian dài trong một thế giới OO âu yếm (Java), vì vậy tôi hy vọng sẽ hiểu được điều này thành ngữ trong C trong tình huống này. Tôi khá chuẩn bị để thay đổi việc sử dụng typedef cho phù hợp với quy ước nếu không có giải pháp trực tiếp. Tôi có một cảm giác mặc dù, và nó không phức tạp.
Cảm ơn
Điểm mấu chốt là bạn ** không ** muốn tạo typedef cho mảng ... Bạn có thể, nhưng sau đó bạn phải đối mặt với tất cả những "khó khăn" đó. Ví dụ điều này 'fooType myArray = {1.0, 2.0, 3.0}; fooType bar = myArray; 'có nghĩa là' float myArray [] = {1.0, 2.0, 3.0}; float bar [] = myArray; 'Có thể đọc được không? :) Một "câu đố" khác là khi bạn xác định nguyên mẫu hàm nhận 'fooType' làm đối số _output_. (Tương tự như 'memset', v.v.) – debleek63
Điều đó giờ đã rõ ràng @ debleek63. Cảm ơn. –