2D указатели массива - доступ к элементам и адресу

0

Я изучаю 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
  • 0
    Пожалуйста, сузьте его и покажите нам результат.
  • 0
    Адрес 1-ой части = 0x7fffb6c5f660 Адрес 2-ой части = 0x7fffb6c5f66c Адрес 1-ой части = 0x7fffb6c5f660 Адрес 2-ой части = 0x7fffb6c5f664 Адрес 1-ой части = 0x7fffb6c5f660 Адрес 1-ой части = 1 Address0x7fff666ff6c6
Показать ещё 7 комментариев
Теги:
pointers

1 ответ

1
Лучший ответ

Эти две линии на самом деле не означают одно и то же. Многомерный массив не эквивалентен указателю на его примитивный тип.

A имеет тип int [2][3], что эквивалентно int *[3]. Тип *A - int[3], а не int. Шаг между последовательными заостренными элементами, sizeof *A, равен sizeof(int)*3.

ptr имеет тип int *. Тип *ptr - int. Шаг здесь, sizeof *ptr, равен sizeof(int).

  • 0
    Пожалуйста, просто исправьте мой код в строке. Я просто хочу понять переменную указателя объявления для 2d массива. Я понял вашу точку зрения, пожалуйста, объясните это.
  • 0
    Вы можете написать int (*ptr)[3] , но я не совсем уверен, что вы хотите сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню