Форум: Форум C++Разное
Новые темы: 00
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Указатели и массивы
 
 автор: asker++   (20.11.2011 в 14:27)   письмо автору
 
 

Как пользоваться указателями на массивы? Вот допустим есть указатель на массив типа int, как при помощи его обратиться к 5 элементу?

  Ответить  
 
 автор: cheops   (21.11.2011 в 15:48)   письмо автору
 
   для: asker++   (20.11.2011 в 14:27)
 

Тут вот какая штука, на самом деле в C, а вслед за ним и в C++ указатели и массивы очень связаны, точнее массивы - это и есть указатели, только записанные в более удобной форме. Однако, если вспомнить, что указатель хранит адрес, то достаточно прибавить к нему единицу и можно получить следующий элемент массива
#include <iostream>
using namespace std;

int main()
{
  int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  for(int i = 0; i < 10; i++)
  {
    cout << *(arr + i) << endl;
  }

  return 0;
}
причем указатели автоматически прибавляют то количество байт, которое находится в типе, например, для int - это 4 байт, для double - 8. Таким образом обратиться к 5 элементу массива можно при помощи конструкции *(arr + 4), где arr - имя массива (читай указатель).

  Ответить  
 
 автор: asker++   (22.11.2011 в 12:19)   письмо автору
 
   для: cheops   (21.11.2011 в 15:48)
 

А как должно выглядеть объявление указателя на массив? Вот если вместо arr мы захотим какой-то свой использовать, я не знаю, там parr?

  Ответить  
 
 автор: cheops   (22.11.2011 в 16:13)   письмо автору
 
   для: asker++   (22.11.2011 в 12:19)
 

Фактически arr - это и есть указатель, да можно объявить parr, который будет равен arr и они друг от друга ничем отличаться не будут:
#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
  // Массива
  int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  // Укзатель на начало массива
  int *parr = arr;
  // Можно обратиться к указателю
  cout << *(parr + 4) << endl; // 5
  // А можно через квадратные скобки, как к массиву
  cout << parr[4] << endl;     // 5

  // Пауза перед закрытием
  system("PAUSE");
  return 0;
}

  Ответить  
 
 автор: asker++   (23.11.2011 в 12:35)   письмо автору
 
   для: cheops   (22.11.2011 в 16:13)
 

Тоесть массивы и указатели это одно и тоже? Все-равно не понятно, пусть массив arr передается внутрь функции, это будет передача указателя? Или будет передан массив?

  Ответить  
 
 автор: cheops   (23.11.2011 в 13:56)   письмо автору
 
   для: asker++   (23.11.2011 в 12:35)
 

Это будет передача указателя, но не просто указателя, а константного указателя.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования