diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 50e5432f2f83b13e3c24e3fb1cd13168ab2ee2e7..b1184420bf6686ecaa0735b6b8f0f54d96d3ba82 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -662,6 +662,24 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re
             ty = refTy->elementType();
 
         NamedType *namedTy = 0;
+
+        if (ArrayType *arrayTy = ty->asArrayType()) {
+            // Replace . with [0]. when `ty' is an array type.
+            FullySpecifiedType elementTy = arrayTy->elementType();
+
+            if (ReferenceType *refTy = elementTy->asReferenceType())
+                elementTy = refTy->elementType();
+
+            if (elementTy->isNamedType() || elementTy->isPointerType()) {
+                ty = elementTy;
+
+                const int length = m_editor->position() - m_startPosition + 1;
+                m_editor->setCurPos(m_startPosition - 1);
+                m_editor->replace(length, QLatin1String("[0]."));
+                m_startPosition += 3;
+            }
+        }
+
         if (PointerType *ptrTy = ty->asPointerType()) {
             // Replace . with ->
             int length = m_editor->position() - m_startPosition + 1;