2010-06-04 17 views
8

Tôi đã tìm thấy mã ví dụ này và tôi đã cố gắng tìm kiếm những gì (int (*)[])var1 có thể phù hợp, nhưng tôi không nhận được kết quả hữu ích nào.var1 đứng (int (*) []) var1 là gì?

#include <unistd.h> 
#include <stdlib.h> 

int i(int n,int m,int var1[n][m]) { 
    return var1[0][0]; 
} 

int example() { 
    int *var1 = malloc(100); 
    return i(10,10,(int (*)[])var1); 
} 

Thông thường tôi làm việc với Vlas trong C99 vì vậy tôi đang sử dụng để:

#include <unistd.h> 
#include <stdlib.h> 

int i(int n,int m,int var1[n][m]) { 
    return var1[0][0]; 
} 

int example() { 
    int var1[10][10]; 
    return i(10,10,var1); 
} 

Cảm ơn!

Trả lời

11
+3

trang web tham khảo tuyệt vời! – xtofl

+0

Tôi sẽ đề xuất công cụ 'cdecl', hay để xem một giao diện web cho nó :) – crazyscot

+1

Tôi đang bối rối - không có loại như" mảng int ". Các loại mảng phải có kích thước, ngay cả khi nó biến. Loại này có được sử dụng trong dàn diễn viên thực sự hợp lệ không? Nếu vậy, nó có nghĩa là gì? 'Sizeof * (int (*) []) 0' là gì? –

0

(int (*)[]) là một con trỏ đến một mảng là int s. Tương đương với đối số hàm int[n][m].

Đây là thành ngữ phổ biến trong C: trước tiên hãy thực hiện lệnh malloc để đặt trước bộ nhớ, sau đó truyền đến loại mong muốn.

+0

Tôi nghĩ bạn nên thuật lại câu trả lời của bạn, bởi vì 'int [] []' không phải là cú pháp C hợp lệ và nó vẫn chưa rõ ý bạn là gì. – Jens

+0

Và tại sao bạn lại bỏ tiền lãi từ malloc? Đó là một con trỏ-to-void, có thể được gán cho bất kỳ loại con trỏ mà không có một diễn viên trong C. (Trong C + + bạn không sử dụng malloc ở nơi đầu tiên, nhưng 'mới'). – Jens

+0

@ Jens: Tôi cần phải có chỉ im lặng :) Tôi không có guru, vì vậy tôi chỉ có thể giải thích những gì các mã có nghĩa là, không xem những gì nó cần phải có đọc. – xtofl

1

Đó là một typecast cho một con trỏ trỏ đến một mảng int.