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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 542
#1

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

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

Чем отличается
wchar_t* strDelimit = L" ";
от
wchar_t strDelimit[] = L" ";
Понятно что одно указатель, а второе массив, но на практике одно и тоже?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2015, 16:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отличие указателя от массива (C++):

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

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

Отличие способов передачи массива в функцию - C++
В чем отличие: double sum(double x) от double sum(double *x) ?

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

Как сделать функцию от указателя на класс и указателя на метод? - C++
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

Преобразование кода без указателя в код с использованием указателя - C++
Правильно ли выполнил? Исходный код без указателя #include <iostream> #include <cstdlib> #include <fstream> using namespace...

6
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] - один и тот же элемент в данном случае.
0
lss
921 / 850 / 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" ";
Это обычный массив широких символов, в который копируется строковый литерал.
0
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 542
09.07.2015, 16:39  [ТС] #4
Цитата Сообщение от galayko Посмотреть сообщение
Массив в памяти просто хранится как последовательность переменных, ты ведь можешь обращаться к элементам массива так:
Да и в указателе я тоже могу так обращаться
0
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) в этом случае покажет размер массива
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
09.07.2015, 18:04 #6
Цитата Сообщение от lss Посмотреть сообщение
На практике разное.
Причем у этих данных разный storage duration. В первом случае указатель будет ссылаться на строку, которая будет жить все время выполнения программы. Она имеет static storage duration. В втором случае будет создан автоматический массив на стеке (если только это не глобальная или статическая переменная) со значением копии заданной строки, который уничтожится в конце области видимости.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,534
Завершенные тесты: 1
10.07.2015, 08:47 #7
klynxe, вот здесь вот славный Evg старательно все расписал: Строковые литералы в Си/Си++
0
10.07.2015, 08:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2015, 08:47
Привет! Вот еще темы с ответами:

В чем отличие двумерного массива типа char от массива указателей на char? - C++
В чем отличие двумерного массива типа char и массива указателей на char ?

Функция возврата указателя на элемент массива - C++
Написать программу с функцией, аргументом которой передается двумерный числовой массив. Результатом функцией возвращается указатель на...

Передача указателя на элемент массива в функцию - C++
Добрых времени суток) Есть массив, самый обычный. Нужно передвинуть влево все значения, кроме последнего (ибо мусор нам не нужен). Т.е....

Как изменить тип указателя массива ? - C++
Например создаю массив: void * mass; if(1 == 1) mass = wchar_t; else mass = char; Пример конечно ппц какой бред, но если...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru