The argument to an opcode is normally a constant memory address. Even if you use some named identifier for a memory address in your assembly code the assembler will translate it to a constant address.
However, some opcodes take what is called an
immediate address, which is not really an address at all but a value. That is usually denoted with a # infront of it.
So, indexing can be done with a constant address, using lda $00,x or lda MyAddress,x where MyAddress is some memory location known to the assembler.
lda #$00,x makes no sense at all, since #$00 implies the value $00 and not the address $00.
EDIT:
You posted while I was typing
. That you wanted it to add was the other possibility I though of other then having confused constant value with constant address. Bah.