On Thursday, October 27, 2016 16:13:34 David via Digitalmars-d-learn wrote: > Hi > > The pointer (.ptr) of an array is the address of the first array > element. But what exactly is the address of the array? And how is > it used? > > auto myArray = [5, 10, 15, 20, 25, 30, 35]; > writeln("myArray.ptr: ", myArray.ptr); // myArray.ptr: > 7FFA95F29000 > writeln("&myArray[0]: ", &myArray[0]); // &myArray[0]: > 7FFA95F29000 > writeln("&myArray: ", &myArray); // &myArray: 7FFE4B576B10 > writeln("*&myArray: ", *&myArray); // *&myArray: [5, 10, 15, > 20, 25, 30, 35]
A dynamic array looks something kind of like this: struct DynamicArray(T) { size_t length; T* ptr; } So, if you take the address of a dynamic array, you're basically taking the address of a struct on the stack, whereas the address in ptr is the address in memory where the data is (be it GC-allocated memory, malloc-ed memory, or a static array on the stack somewhere). Similarly, if you have a class reference, and you take its address, you're taking the address of the reference, not the class object that it points to. e.g. class MyClass { string foo; } MyClass mc; auto addr = &mc; addr is the address of mc on the stack, whereas mc itself is null. - Jonathan M Davis