The declaration
char str2[] = "word2";
sets the name str2 as an array type to the first byte of consecutive memory locations storing the string "word2", particularly str2 will point to a byte in memory storing the character w. (However note that, str2 is not a pointer, see the comments below.)
Note that if you now try to dereference str2 + 1, which follows pointer arithmetic, the pointer will be incremented by the size of the data type of the element being pointed at, which here is of char type and hence address pointed by str2 + 1 will be precisely 1 byte (size of char data type) away from the address pointed by str. Thus, str2 + 1 will point to the memory byte having 'o'.
Your seemingly overkill code
( // part 3 -- cast memory address (int) as pointer * (char *) //
part 1 -- get the memory address as an int ((long)&str2 // part 2 --
get the index of 1 by +1 memory address +1) ) = 'a';
works because is char is of size 1 byte and hence the +1 part takes the pointer to the next byte which is also the next character in the string. Had it been an integer array, you would have to increment by 4 or 8 bytes (depending on the size of int in your system) to get to the next element of the array.
The equivalent code segments for whatever you are trying to achieve are already in the comments by dxiv. I just wanted to clarify things a bit.
str2[1]is equivalent to*(str2 + 1).str2an int type then or does the+ 1operation cast it to a number?str2decays to achar*and+1is the usual pointer arithmetic. There is no need for, and in fact no place for, involving integer types in this.What is the equivalent,,there can be many equivalents, question is what syntax you're interested in?