I write code (or what looks like it) in nearly any language (apart from probably assembler, although I did do some M6509 stuff way back in 1988 or so), java and js, C shell, python, Matlab, F77 and F90, Basic, Pascal, C++, Qt, etc., whatever suits the application best, or whatever is available. Not particularly good at it (as one previous contributor said) but I get around. Typical physicist ...
The DevAddress = tmp trick was more sort-of-like meta-code, not real. Although one could possibly do something like it with the use of pointers, malloc(), memcp() and sizeof(), I guess. Apologize for the confusion caused.
Well it doesn't matter how many languages you know. If you want to copy the contents of one 8-char array to another, you don't get that outcome by attempting to assign the name of one array to the other. Not in C.
The code of yours will assign to DevAddress, the value of the location of tmp. It's a pointer assignment. Which is actually ok, except when you read the next value of tmp for the next device. That approach will not give you the array of device ID codes which you actually want.
You can copy the elements of tmp char by char, as I suggested. Or you could get fancy and use something like memcpy().