diff --git a/cuda_bindings/docs/source/index.rst b/cuda_bindings/docs/source/index.rst
index 0e570adc..a1232001 100644
--- a/cuda_bindings/docs/source/index.rst
+++ b/cuda_bindings/docs/source/index.rst
@@ -11,6 +11,7 @@
    release.md
    environment_variables.md
    api.rst
+   tips_and_tricks.rst
 
 
 Indices and tables
diff --git a/cuda_bindings/docs/source/tips_and_tricks.rst b/cuda_bindings/docs/source/tips_and_tricks.rst
new file mode 100644
index 00000000..d979ea85
--- /dev/null
+++ b/cuda_bindings/docs/source/tips_and_tricks.rst
@@ -0,0 +1,9 @@
+Tips and Tricks
+---------------
+
+Getting the address of underlying C objects from the low-level bindings
+=======================================================================
+
+All CUDA C types are exposed to Python as Python classes. For example, the :class:`~cuda.bindings.driver.CUstream` type is exposed as a class with methods :meth:`~cuda.bindings.driver.CUstream.getPtr()` and :meth:`~cuda.bindings.driver.CUstream.__int__()` implemented.
+
+There is an important distinction between the ``getPtr()`` method and the behaviour of ``__int__()``. If you need to get the pointer address *of* the underlying ``CUstream`` C object wrapped in the Python class, you can do so by calling ``int(instance_of_CUstream)``, which returns the address as a Python `int`, while calling ``instance_of_CUstream.getPtr()`` returns the pointer *to* the ``CUstream`` C object (that is, ``&CUstream``) as a Python `int`.