Because TChain doesn’t actually go and open the underlying TTree when you call SetBranchAddress, it defers that operation to when you actually ask for an entry number (e.g. to avoid loading tree number 0 only to skip it and read the first data from tree number 10).
You can force a load of the underlying TTree and then call SetBranchAddress on the TChain. At that point since there already is a loaded TTree the SetBranchAddress call should behave the same as if you called it on the actual TTree (@pcanal can correct me if I’m wrong):
C->LoadTree(0); // pre-load the first tree
C->SetBranchAddress(...) // returns 0