+ 2

Challenge: write a function that returns a matrix of function pointers

Weird challenge :) Look my solution: https://code.sololearn.com/cfxZARGS1AR3/#cpp

15th Jun 2017, 8:04 AM
Andrea Simone Costa
Andrea Simone Costa - avatar
17 Réponses
+ 4
@Andrea What is a matrix? This right? - int matrix[3][3]; This one is the same as int ** matrix, as an array is nothing but a pointer. And a pointer to a pointer == 2D Array... Or this? - https://code.sololearn.com/cq24J951TxgI/?ref=app BTW how will you assign functions to the matrix of functions? As input won't work... So you'll have to do it manually... Here is something I can think of. Please guide me... typedef int(*fx)(int,int)** FxMatrix; typedef int(*fx)(int,int) FxType; FxMatrix Assign( int(*fx1)(int,int), int(*fx2)(int,int), int(*fx3)(int,int), int(*fx4)(int,int)) { FxMatrix mat={{fx1, fx2}, {fx3, fx4}}; return mat; } int add(int a, int b) { return a+b; } int sub(int a, int b) { return a-b; } int mul(int a, int b) { return a*b; } int div(int a, int b) { return a/b; } int main() { FxMatrix matrix = new FxType*[2]; for(int i=0;i<2;i++) matrix[i] = new FxType[2]; matrix = Assign( &add, &sub, &mul, &div ); for(int i=0;i<2;i++) for(int j=0;j<2;j++) cout<<matrix[i][j](2,2); //Prints 4,0,4,1... }
15th Jun 2017, 3:27 AM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 2
@kinshuk i dont know with your method. I dont use vector, instead i use dear old malloc()
14th Jun 2017, 5:26 PM
Andrea Simone Costa
Andrea Simone Costa - avatar
+ 2
@kinshuk you said too much time pointers 😂😂😂 but no...surely not like this remember that matrix are not pointer to pointers and rembember that someone invented typedef word
14th Jun 2017, 5:54 PM
Andrea Simone Costa
Andrea Simone Costa - avatar
+ 2
@kinshuk I think your class is great but now i can't control 2300 lines. You make a mistake: array are not pointers and matrix are not pointers to pointers. What? http://c-faq.com/aryptr/aryptrequiv.html "A reference to an object of type array-of-T which appears in an expression decays (with three exceptions) into a pointer to its first element; the type of the resultant pointer is pointer-to-T." Now if an array decays in a pointer....a matrix? Try yourself: int matrix[10][20]; int **P = matrix; // Error: cannot convert a int(*)[20] into a (int**) int (*p)[20] = matrix; //Ok What does it mean? It's difficult to explain for me in english but matrix is an pointer-to-matrix that automaticaly decays into a pointer-to-array of 20 elements. So matrix points first 20 elements. When you create a matrix using pointers-to-pointers you have to do something that using pointers-to-array you have not to do: create an array of pointers. Because the pointers-to-array has an information that the pointer-to-pointer has not: number 20. Look my code and how its simple create a matrix using only one pointer-to-array. There is a little example. Then i will post another code for explain my solution for this challenge. However your little code is not so bad, but you create it in the main: I want a function that create and return a matrix to the main ;) P.S. typedef int(*fx)(int,int)** FxMatrix; is not ok for the compiler :P
15th Jun 2017, 7:44 AM
Andrea Simone Costa
Andrea Simone Costa - avatar
+ 2
@kinshuk Yes automatically an array decays into a pointer to its first element, specially when it is an argument of a function ;) If you want, look my solution here: https://code.sololearn.com/cfxZARGS1AR3/#cpp
15th Jun 2017, 8:10 AM
Andrea Simone Costa
Andrea Simone Costa - avatar
+ 2
Though I didn't win this challenge, I learned many new things. Thank You very much! https://code.sololearn.com/c10itmF1cL6V/?ref=app
15th Jun 2017, 8:55 AM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 2
Thanks for playing!!!
15th Jun 2017, 9:01 AM
Andrea Simone Costa
Andrea Simone Costa - avatar
+ 2
@Andrea Waiting for the next challenge. I will try to win that one!
15th Jun 2017, 9:02 AM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 2
New challenge is coming 😂
15th Jun 2017, 9:05 AM
Andrea Simone Costa
Andrea Simone Costa - avatar
15th Jun 2017, 10:25 AM
Andrea Simone Costa
Andrea Simone Costa - avatar
+ 1
Yes it is 😄
14th Jun 2017, 3:54 PM
Andrea Simone Costa
Andrea Simone Costa - avatar
+ 1
a matrix of function pointers? Something like this? vector<vector<int(*func)(int,int)>> ? How will one assign functions to this?
14th Jun 2017, 5:18 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 1
I have no idea how you declare a pointer of pointers to a pointer to a function. Like this maybe? int (*func)(int,int) ** function_array;
14th Jun 2017, 5:52 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 1
@Andrea Yeah since the typedef if not working, I converted it to a define, and that works... I had read that a function which has an array as an argument: int func(int arr[10]) reads it like this: int func(int *arr) Maybe Im confused. Ill have to study the tutorials again...
15th Jun 2017, 8:05 AM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 1
@Andrea Im returning the matrix in main. How can you simply print a matrix of function pointers without saving it in another variable of the same type, after all its a matrix! You want me to use print function? How will that return a matrix? I can think of this: void print(FxMatrix a); In main: print(assign(...)); //Returns a rvalue ref which is used by print...
15th Jun 2017, 8:08 AM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 1
@Andrea Youre doing the same thing -_- Returning a matrix in main to a matrix variable...
15th Jun 2017, 8:10 AM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
0
Sounds interesting...
14th Jun 2017, 3:52 PM
Jeremie
Jeremie - avatar