Create is a wrapper around new + autorelease. You want to use create to have an object with refcount = 0, and new for an object with refcount = 1. Note that you don’t need to provide a capacity : it’s a hint to how many elements there will be (contrary to a static array which must be the actual size). Even then, the array will resize itself if you add more elements. It’s mainly useful for performance reasons if you know straight off you are going to need a lot of elements and want to “reserve” that space.
When you create a CCArray, it doesn’t actually fill itself with any object. You need to add your objects, so it’s normal it fails if you try it on an empty array.
The  operator isn’t overloaded, so no, it’s not a valid syntax. You would need to add the overload in cocos2dx. You could do that and send a pull request. Otherwise, it defaults to the standard behavior of C++, which is pointer arithmetic : don’t do it, it will probably crash your app or do weird stuff.
To really get it, you should look at NSArray : cocos2dx is mainly a rewrite of cocos2d-iphone plus some useful features of Objective-C : reference counting, NSObject, NSArray, NSDictionary and so on …