
cái cậu này, đi tảo mộ này tết à :( nhưng mà cái này hay nên mình đồng tình với cậu.... hj hj
để mình dùng logic phân tích câu hỏi của cậu nhé
PHP Code:
char *(*((*aa[10][10])()))(char **as,int size);
Bước 1 : đầu tiên, mình dịch đoạn code sau
PHP Code:
char *(*p);
p=2;
nhận được thông báo như sau : cannot convert from 'int' to 'char **'
vậy có nghĩa là p ở đây là char**
ổ vậy là done 1 vấn đề
Bước 2:
PHP Code:
char *(*p)(char**,int );
p=2;
nhận được thông báo như sau : cannot convert from 'int' to 'char *(__cdecl *)(char **,int)
vậy ta thấy 1 điều : đây là 1 con trỏ hàm viết đẹp, chuẩn hơn phải là
PHP Code:
char* (*p)(char**,int);
//cái * đầu tiên phải đưa về gần char mới là chuẩn,
//giống như là char* gets(char*)
//char* ở đây là kiểu dữ liệu trả về
Bước 3:
PHP Code:
char *(*p)(char**a,int b);
p=2;
mà vẫn nhận được thông báo như thế , vậy có nghĩa là cái định danh thêm vô ko có ý nghĩa gì,
=> đã giải thích được cái
(char **as,int size)
của bạn rồi nhé, đoạn này có ý nói là con trỏ hàm có 2 tham số truyền vào là
(char**,int)
viết lại là
PHP Code:
char* (*((*aa[10][10])()))(char **,int);
Bước 4: tiếp theo
dịch thử
PHP Code:
char* (*(*p))(char **,int);
p="aa";
nhận được thông báo và tôi thấy nó hoàn toàn giống với
PHP Code:
char* (**p)(char **,int);
p="aa";
ok? vấn đề đến đây lại dễ hiểu hơn
Bước 5 : quan trọng nhất
PHP Code:
void ham(int a)(int b,int c)
{
cout<<a<<"la nhi";
}
void main()
{
ham(2)(2,3);
system("pause");
}
dịch code này, tôi nhận được dòng báo lỗi : function returns function
ổ, lại 1 vấn đề nữa được thắc mắc, đó là 2 cái ngoặc này của bạn
(*aa[][])
()
tôi đã hiểu,
char*
(*((*p)()))(char **as,int size);
cả cái đoạn tôi đóng đỏ đó sẽ trả về 1 tên hàm hoặc con trỏ hàm (chưa bàn chi tiết, chỉ tiết ở bước 7) và trở thành
PHP Code:
char* hàm(char**,int)
ok.vấn đề đã giải quyết 60%
Bước 6 :
PHP Code:
char* (*((*aa[10][10])()))(char **,int);
chỉ khác bước 5 ở chỗ đây là 1 mảng các con trỏ như bước 5
Bước 7 :
char* (*((*aa)()))(char **,int);
giả sử ((*aa)()) trả về tên hàm là
hamx
vậy ta có
char* (*
hamx)(char**,int)
vậy đến đây vấn đề đã được giải quyết 99% rồi,
..................... ok??????
vậy đơn giản hóa vấn đề, ta có đây là khai báo 1 mảng con trỏ... hj hj hj....