Let $p \in \mathbb{R}[X]$ and $\varepsilon > 0$. Now, if $p = a_nX^n + \dots + a_0$, for any $b_0, \dots, b_n \in \mathbb{Q}$ the polynomial $q = b_nX^n + \dots + b_0$ satisfies, given $x \in [a,b]$,
$$
|p(x)-q(x)| \leq \sum_{i=0}^n|x|^i|a_i-b_i|.
$$
Since the interval and the polynomial (in particular its degree) are fixed, we can define
$$
\eta_j := \max_{x \in [a,b]}|x|^j
$$
which only depend on $p$ and $[a,b]$. Thus, by density of the rationals in the reals, we can take each $b_i$ so that $|a_i-b_i| < \frac{\varepsilon}{2n_i}$ and then,
$$
|p(x)-q(x)| \leq \frac{\varepsilon}{2} < \varepsilon \quad (\forall x \in [a,b]).
$$
This proves that the set of polynomials with rational coefficients is dense on the polynomials with real coefficients on $[a,b]$, and so it is dense in the continuous functions $C([a,b])$. Moreover, it is countable, because
$$
\begin{align*}
& \qquad \qquad \mathbb{Q}[X] \longrightarrow \bigcup_{n \geq 1} \mathbb{Q}^n \\
&b_nX^n + \dots + b_0 \longmapsto(b_0,\dots, b_n)
\end{align*}
$$
is an injection.