Форум программистов, компьютерный форум CyberForum.ru

Отличие указателя от массива - C++

Восстановить пароль Регистрация
 
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
09.07.2015, 16:23     Отличие указателя от массива #1
Чем отличается
wchar_t* strDelimit = L" ";
от
wchar_t strDelimit[] = L" ";
Понятно что одно указатель, а второе массив, но на практике одно и тоже?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2015, 16:23     Отличие указателя от массива
Посмотрите здесь:

Возвращение функцией массива (или указателя на массив) C++
Отличие передачи по ссылке от передачи указателя ? C++
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... C++
C++ Передача указателя на массив и использование этого массива
Как из указателя на массив достать конкретное значение массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
galayko
5 / 5 / 2
Регистрация: 20.10.2013
Сообщений: 68
09.07.2015, 16:33     Отличие указателя от массива #2
Как я понимаю, wchar_t strDelimit[] указывает на первый элемент массива, который является переменной типа wchar_t, а wchar_t* strDelimit просто указывает на переменную типа wchar_t.
Массив в памяти просто хранится как последовательность переменных, ты ведь можешь обращаться к элементам массива так:
C++
1
2
3
4
5
int a[10], *p;
p = a;
 
a[4] = 10;
*(a+4) = 15;
*(a+4) и a[4] - один и тот же элемент в данном случае.
lss
919 / 849 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
09.07.2015, 16:38     Отличие указателя от массива #3
Цитата Сообщение от klynxe Посмотреть сообщение
Понятно что одно указатель, а второе массив, но на практике одно и тоже?
На практике разное. Нужно писать:
C++
1
const wchar_t* strDelimit = L" ";
, так как это указатель на строковый литерал (память только для чтения).
C++
1
wchar_t strDelimit[] = L" ";
Это обычный массив широких символов, в который копируется строковый литерал.
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
09.07.2015, 16:39  [ТС]     Отличие указателя от массива #4
Цитата Сообщение от galayko Посмотреть сообщение
Массив в памяти просто хранится как последовательность переменных, ты ведь можешь обращаться к элементам массива так:
Да и в указателе я тоже могу так обращаться
rjxk
 Аватар для rjxk
7 / 7 / 6
Регистрация: 18.06.2015
Сообщений: 30
09.07.2015, 16:41     Отличие указателя от массива #5
klynxe, между этими переменными большая разница.

Цитата Сообщение от klynxe Посмотреть сообщение
wchar_t* strDelimit = L" ";
strDelimit - указатель на константную строку.
sizeof(strDelimit) покажет размер указателя.

Цитата Сообщение от klynxe Посмотреть сообщение
wchar_t strDelimit[] = L" ";
strDelimit - можно рассматривать как указатель на изменяемую строку или как массив.
sizeof(strDelimit) в этом случае покажет размер массива
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
09.07.2015, 18:04     Отличие указателя от массива #6
Цитата Сообщение от lss Посмотреть сообщение
На практике разное.
Причем у этих данных разный storage duration. В первом случае указатель будет ссылаться на строку, которая будет жить все время выполнения программы. Она имеет static storage duration. В втором случае будет создан автоматический массив на стеке (если только это не глобальная или статическая переменная) со значением копии заданной строки, который уничтожится в конце области видимости.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2015, 08:47     Отличие указателя от массива
Еще ссылки по теме:

В чем разница массива и указателя в данной ситуации? C++
C++ Передача указателя на элемент массива в функцию
C++ В чем отличие двумерного массива типа char от массива указателей на char?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
10.07.2015, 08:47     Отличие указателя от массива #7
klynxe, вот здесь вот славный Evg старательно все расписал: Строковые литералы в Си/Си++
Yandex
Объявления
10.07.2015, 08:47     Отличие указателя от массива
Ответ Создать тему
Опции темы

Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru