Я изучаю 2d указатели массива, и вот мой код. Я не знаю, почему эта строка:
cout<<"Address of 1st part = "<<*ptr'
не показывает адрес, пока эта строка показывает мне адрес:
cout<<"Address of 1st part = "<<*(A)'
Эти обе линии означают, что кто-то может мне помочь.
#include <iostream>
using namespace std;
int main()
{
int A[2][3]={{1,2,4},{5,8,3}};
int *ptr;
ptr=&A[0][0];
cout<<"Address 1st part = "<<A<<endl;
cout<<"Address 2nd part = "<<A+1<<endl;
cout<<"Address 1st part = "<<ptr<<endl;
cout<<"Address 2nd part = "<<ptr+1<<endl;
cout<<"Address of 1st part = "<<*(A)<<endl;
cout<<"Address of 1st part = "<<*ptr<<endl;
cout<<"Address"<<*(A+1)+1<<endl;
cout<<*(A+1)+2<<endl;
return 0;
}
вывод
Address 1st part = 0x7fffb6c5f660
Address 2nd part = 0x7fffb6c5f66c
Address 1st part = 0x7fffb6c5f660
Address 2nd part = 0x7fffb6c5f664
Address of 1st part = 0x7fffb6c5f660
Address of 1st part = 1
Address0x7fffb6c5f670
0x7fffb6c5f674
Эти две линии на самом деле не означают одно и то же. Многомерный массив не эквивалентен указателю на его примитивный тип.
A
имеет тип int [2][3]
, что эквивалентно int *[3]
. Тип *A
- int[3]
, а не int
. Шаг между последовательными заостренными элементами, sizeof *A
, равен sizeof(int)*3
.
ptr
имеет тип int *
. Тип *ptr
- int
. Шаг здесь, sizeof *ptr
, равен sizeof(int)
.
int (*ptr)[3]
, но я не совсем уверен, что вы хотите сделать.