I imagine you have already solved this, but I'll try to answer.
First OpenCL is close enough to C so that the same rules apply for pointers, at least as far as your example illustrates. In C/C++, using A.real as you have done is not meaningful. You would have to say A.real to describe a real value, and there is no method to directly describe an array that is just the real values of the DoubleComplex array.
I'm guessing you want your AddCL function to add the reals for all the elements in the array and store each one in the real part of C. Then you should define it as something like AddRealCL (A,B,C) passing the pointers for all three arrays, and then the routine just accesses the individual real elements, adds them, and then stores in C.
You could have the function return a C which is a pointer, but you would either need to give it the address of C as parameter, or the function would have to allocate a new C.