I found this on one of Nick Gammon's pages. I get all the SPI stuff and I get how this iterates through the string by moving the pointer and setting c to the character being pointed to each time. But how does this ever end?
for (const char * p = "Fab" ; c = *p; p++)
SPI.transfer (c);
The loop terminates when the condition expression - the second thing in the for() statement - evaluates as 0, or false. In this case, that expression is an assignment, which returns the value that's assigned to the left-hand side. The string that pointer p points to has four elements: three printable characters, followed by a terminating null, or 0. When the pointer is incremented to point to the fourth character, it assigns the value of 0 to character variable c. The assignment evaluates as 0, or false, and the loop terminates.
You can verify that the loop does indeed terminate, without building an SPI gizmo, by substituting a Serial.print() for the SPI.transfer in Nick's code, and then printing something afterward to prove that the processor hasn't hung. To see the "stop on null" characteristic in action, you can insert a null in the string, like this:
while c=*p is not a conditional, the loop will evaluate it and terminate whenever the value of p (*p) is equal to zero, since zero is considered false and non-zero true.