所以我以为我理解了地址、指针和 & 符号,然后这发生在我身上。如果我以简单的方式创建一个数组,并尝试以各种方式打印出它的地址,就像这样......
string textArray[5] = {"test1", "test2", "test3", "test4", "test5"};
cout << "Address of string &array: " << &textArray << endl;
cout << "Address of string array: " << textArray << endl;
cout << "Address of string &array[0]: " << &textArray[0] << endl;
正如我所料,所有 3 行都打印相同的内存地址。但是,如果您将第一行更改为
string *textArray = new string[5] {"test1", "test2", "test3", "test4", "test5"};
cout << "Address of string &array: " << &textArray << endl;
cout << "Address of string array: " << textArray << endl;
cout << "Address of string &array[0]: " << &textArray[0] << endl;
&textArray 的地址不一样!所以我的问题是为什么?通常在数组中,地址只是指向第一个元素的指针。但这在动态分配的数组中不是真的吗?我从 &textArray 返回的地址是什么?