One should use the definition of adjoint operator, and the knowledge about the action of the operator itself.

Let $\mathscr{H}$ be a (separable) Hilbert space with scalar product $\langle\,\cdot\,,\,\cdot\,\rangle$. Given a densely defined operator $A$ with (dense) domain $D(A)\subseteq \mathscr{H}$, its adjoint $A^*$ is the (closed) operator with domain
>$$D(A^*)=\bigl\{\varphi\in\mathscr{H}, \exists \eta\in\mathscr{H}, \forall \psi\in D(A), \langle \psi,\eta\rangle=\langle A\psi,\varphi\rangle\bigr\}\;,$$

and action on $\varphi\in D(A^*)$ defined by $A^*\varphi=\eta$, where $\eta$ is the same vector appearing above in the definition of the domain. In other words, the action of the adjoint $A^*$ is defined, on its domain of definition, by
>$$\langle \psi, A^*\varphi\rangle=\langle A\psi,\varphi\rangle\; .$$

Once you have an explicit form of the operator, it is not difficult to find the adjoint applying the definition. For example, let $\mathscr{H}=L^2(\mathbb{R})$, and let $A=\hat{x}$ (multiplication by $x$), with domain the rapidly decreasing test functions $\mathscr{S}(\mathbb{R})$ and action:
$$\langle \hat{x}\psi,\varphi\rangle_2= \int_{\mathbb{R}} x\bar{\psi}(x)\varphi(x)\mathrm{d}x\; .$$
Clearly, the adjoint action of $\hat{x}^*\lvert_{\mathscr{S}}=\hat{x}$, however the domain of the adjoint is *larger* in this case, $D(\hat{x}^*)\supset \mathscr{S}(\mathbb{R}^d)$, with the inclusion being strict. The case of the momentum operator $\hat{p}=-i\partial_x$ (with the same domain of definition) is rather similar, but it involves an integration by parts.

To find the adjoint action of linear combinations of operators is formally easy if you know the adjoint of the components, as it is seen from the definition; whether the formal action is valid on some domain is however much trickier in general (it could be only true for the vector $0$). In particular, let $\{A_j\}_{j=1}^N$, $D=\bigcap_{j=1}^n D(A_j)$, and $A=\sum_{j=1}^N z_j A_j$ on $D$ (the $z_j$ are complx numbers). Then the adjoint action is, on $D'=\bigcap_{j=1}^n D(A_j^*)$,
$$A^*\lvert_{D'}=\sum_{j=1}^N \bar{z}_j A^*_j\; .$$
In the explicit case the OP mentions, it is true that $a^*\lvert_{\mathscr{S}}= \hat{x}+i\hat{p}$ (it is actually true on a slightly more general domain), however $D(a^*)\supset \mathscr{S}$ and there may be vectors $\psi$ for which *it is not possible to write $a^*\psi=(\hat{x}+i\hat{p})\psi$*, for the right hand side could fail to make sense (but the left hand side still does if we use the definition of adjoint). Unbounded operators are tricky!

Let me remark that, aside from the definition, abstractly only few information can be given about the adjoint if we do not have any information about the explicit action of the operator on the given Hilbert space. One such information is, *e.g.*, that the adjoint is always a closed operator if the original operator is densely defined (but possibly not closed itself).