They are called GET parameters in a HTTP GET request, and they work as such.
From your example, this portion of the URL is sent as part of the request line* in a GET request: " /forums/topics.aspx?forumID=3&topicRepeater1-p=777". On the server-side, this is then (typically) split into two chunks:
Path: /forums/topics.aspx
Parameters: forumID=3&topicRepeater1-p=777
The path is (again, typically) used to identify the script or program which will "handle" the request. Also note the "?" is discarded since it's only used as a method splitting the path from the parameters.
Each parameter is then split by the ampersand (&) character to form key-value pairs:
- [KEY, VALUE]
- forumID, 3
- topicRepeater1-p, 777
From this point the variables can be used to construct the page/document/response to be delivered (especially relevant in dynamic pages). In this case, filtering posts by a specific forum and further retrieving a subset of the initial result through an offset (probably something like the desired page number multiplied by the number of topics displayed by default to that same result of that calculation plus the number of topics again).
It's fun to play with them, and not just on this site.
* For reference, in a POST request, the parameters are instead placed in the body of the request, but formatted in the same way. HTTP headers work in a similar way, but each key-value is split by a colon, and each key-value pair is split by a carriage return and a line feed (\r\n) with an extra set given after the headers to split them from the HTTP body.