I am trying to declare a variable for matrix multiplication as follows:
__shared__ float As[BLOCK_SIZE][BLOCK_SIZE];
I am trying to make it
Sounds correct.
Generally in this case you'll need to malloc something.
There are two things here, one C doesn't know about 2D arrays (it's just an array of arrays) and array sizes need to compile time constants (or something the compiler can calculate at compile time).
If you are using C99 you can declare the array size using a parameter of the function, but C99 support is... spotty at best.