jin*_*wan 51 c++ arrays pointers
到现在为止,我认为数组与指针相同.但我发现了一个奇怪的案例:
int array[5] = { 10,11,12,13,14};
std::cout << array << std::endl;
std::cout << &array << std::endl;
std::cout << &array[0] << std::endl;
int *pArray = new int[5];
std::cout << pArray << std::endl;
std::cout << &pArray << std::endl;
std::cout << &pArray[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)
0x7ffeed730ad0
0x7ffeed730ad0
0x7ffeed730ad0
0x7f906d400340
0x7ffeed730a30
0x7f906d400340
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,array并且&array具有相同的价值.但是pArray并且&pArray有不同的价值.如果数组与指针相同,则数组的地址应与数组不同.怎么可能array和&array是一样的?如果array和&array相同,保存数组值的内存的地址是什么?
Som*_*ude 83
普通array衰变到指向其第一个元素的指针,它等于&array[0].第一个元素也恰好与数组本身在同一地址开始.因此&array == &array[0].
但重要的是要注意类型是不同的:
&array[0]是(在您的示例中)int*.&array是int(*)[5].之间的关系&array[0]和&array,如果我表现出来更多一点"图形"可能会更容易(与指针加):
+----------+----------+----------+----------+----------+ | array[0] | array[1] | array[2] | array[3] | array[4] | +----------+----------+----------+----------+----------+ ^ | &array[0] | &array
虽然指针有所不同.指针array指向某个内存,值array是该内存的位置.这是你使用时得到的&array[0].它也是一样的pArray.
当你使用时,pArray你得到一个指针指针.也就是说,您获得变量pArray本身的位置(地址).它的类型是&pArray[0].
指针有点图形,&pArray就像这样
+--------+ +-----------+-----------+-----------+-----------+-----------+-----+ | pArray | ----> | pArray[0] | pArray[1] | pArray[2] | pArray[3] | pArray[4] | ... | +--------+ +-----------+-----------+-----------+-----------+-----------+-----+ ^ ^ | | &pArray &pArray[0]
[注意pArray在"数组"的末尾,这是因为指针不保留它指向的内存的信息.指针仅指向特定位置,即"数组"的"第一个"元素.将内存视为"数组"取决于程序员.]