One-forms are dual to tangent vectors In my class it was said that 

"A tangent vector $X \in T_p(\mathbb{R}^n)$ acts on a one-form to give a real number"

and 

"A one-form acts on a tangent vector to give a real number"

Now the 'tangent space' $T_p(\mathbb{R}^n)$ is a $n$-dimensional vector space and the elements of $T_p(\mathbb{R}^n)$ which we call tangent vectors are actually derivations, which are linear maps $w : C^{\infty}(\mathbb{R}^n) \to \mathbb{R}$ satisfying a product rule. 
One-forms are elements of the dual vector space $T_p^*(\mathbb{R}^n)$, which we call the cotangent space. They are by definition of a dual vector space, linear maps from $T_p(\mathbb{R}^n)$ to $\mathbb{R}$, e.g $f : T_p(\mathbb{R}^n) \to \mathbb{R}$. From this it is easy to see that a one-form takes as input a tangent vector and outputs a real number.
However I'm having trouble seeing how a tangent vector (derivation) takes as input a one-form to output a real number since it's domain isn't even $T_p^*(\mathbb{R}^n)$.
 A: You are putting too much significance on the word "act", taking it to mean that the object itself should necessarily (and strictly) be a function whose domain includes what they are supposed to act upon. 
An analogy is the following: Imagine a ruler (among a set $A$ of rulers with different scaling) and a piece of string (among a set $B$ of strings of different lengths). When you fix a ruler, it "acts" upon the strings by measuring them, and returns a number (their length). When you fix a string, it "acts" upon the rulers by being measured by them, and returns a number (the length of the string according to the scalings). Rulers and objects are, clearly, not functions which take each other as arguments strictly speaking, but they can be interpreted as so in the above sense. This is what happens with tangent vectors.
In the above framework, we can see the mapping 
\begin{align*}
A \times B &\to \mathbb{R} \\
(R,O) &\to \text{Length of $O$ according to $R$}.
\end{align*}
We now have two natural mappings $\mathfrak{f}:A \to \mathcal{F}(B;\mathbb{R})$ and $\mathfrak{g}:B \to \mathcal{F}(A;\mathbb{R})$, which are just fixing an input of the above mapping which takes two inputs.
Going back to the context of differential topology of your question (although this is essentially linear algebra), the above mappings translate to 
$$\mathfrak{f}:T_pM^* \to \mathrm{Hom}(T_pM;\mathbb{R})=T_pM^{*}$$
and
$$\mathfrak{g}:T_pM \to \mathrm{Hom}(T_pM^*; \mathbb{R}) =T_pM^{**}. $$
The first map is just the identity, whereas the second map is the standard embedding of a vector space in its bidual. If you want to take the word "act" very seriously and strictly, then the text is actually talking about $\mathfrak{g}(X)$. But the usual advice is not to take words very seriously and strictly, particularly when a lot of identifications will happen, and when objects can have multiple roles and contexts.
A: "tangent vectors act on $1$-forms": there is a linear map form the linear space of tangent vectors to a linear space of $1$-forms (the bidual space of the tangent space) that takes $1$-forms to reals.
What is not stated explicitly is by what map this action happens.
In this case it is always meant the "evaluation of the $1$-form on the tangent vector" map:
$$T_p(\mathbb{R}^n)\to T^{**}_p(\mathbb{R}^n); X\mapsto(f\mapsto f(X))$$
A: You are right, but given a linear space $X$ there is a natural embedding of $X$ into $X^{**}$ by reversing the application. Let $x \in X$ and $f \in X^{*}$ and define $\omega_x \in X^{**} $ by $\omega_x(f) = f (x). $
