12 / 12 / 4
Регистрация: 07.09.2012
Сообщений: 542
1

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

09.07.2015, 16:23. Показов 3511. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Чем отличается
wchar_t* strDelimit = L" ";
от
wchar_t strDelimit[] = L" ";
Понятно что одно указатель, а второе массив, но на практике одно и тоже?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2015, 16:23
Ответы с готовыми решениями:

Отличие массива фиксированной длины от указателя
Объясните на примере в чем отличие от *(указателя) когда это массивы?

В чём отличие константного указателя и указателя на константу?
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Отличие передачи по ссылке от передачи указателя ?
Чем отличаюся следующие коды? class MyClass{ int val; public: int get_val(){return val;}...

Отличие ссылки от указателя
Здравствуйте. Не совсем понимаю отличие ссылки от указателя. В частности, при передаче результата...

6
5 / 5 / 3
Регистрация: 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] - один и тот же элемент в данном случае.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
09.07.2015, 16:38 3
Цитата Сообщение от klynxe Посмотреть сообщение
Понятно что одно указатель, а второе массив, но на практике одно и тоже?
На практике разное. Нужно писать:
C++
1
const wchar_t* strDelimit = L" ";
, так как это указатель на строковый литерал (память только для чтения).
C++
1
wchar_t strDelimit[] = L" ";
Это обычный массив широких символов, в который копируется строковый литерал.
0
12 / 12 / 4
Регистрация: 07.09.2012
Сообщений: 542
09.07.2015, 16:39  [ТС] 4
Цитата Сообщение от galayko Посмотреть сообщение
Массив в памяти просто хранится как последовательность переменных, ты ведь можешь обращаться к элементам массива так:
Да и в указателе я тоже могу так обращаться
0
7 / 7 / 9
Регистрация: 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) в этом случае покажет размер массива
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
09.07.2015, 18:04 6
Цитата Сообщение от lss Посмотреть сообщение
На практике разное.
Причем у этих данных разный storage duration. В первом случае указатель будет ссылаться на строку, которая будет жить все время выполнения программы. Она имеет static storage duration. В втором случае будет создан автоматический массив на стеке (если только это не глобальная или статическая переменная) со значением копии заданной строки, который уничтожится в конце области видимости.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
10.07.2015, 08:47 7
klynxe, вот здесь вот славный Evg старательно все расписал: Строковые литералы в Си/Си++
0
10.07.2015, 08:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2015, 08:47
Помогаю со студенческими работами здесь

В чем отличие массива структур от массива объектов. С примером покажите наглядным
В чем отличие массива структур от массива объектов. С примером покажите наглядным

Отличие множества от массива
Скажите, пожалуйста, какую строчку добавить, чтобы это было множество, а не массив (В множестве не...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс)...

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B* b = nullptr; }; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru