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

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

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

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

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

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

Отличие передачи по ссылке от передачи указателя ? - 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) ?

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

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

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

Чтение символьного массива посредством указателя - C++
Доброго времени суток, подскажите способы чтения символьных строк с помощью указателя. Вот мой вариант (подскажите бред или нет) ...

Передача указателя на массив и использование этого массива - C++
Здравствуйте. в h объявляю void SaveAll(QTextEdit *textedit); в одной из функций передаю функции SaveAll указатель на массив ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
921 / 851 / 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
Сообщений: 538
09.07.2015, 16:39  [ТС]     Отличие указателя от массива #4
Цитата Сообщение от galayko Посмотреть сообщение
Массив в памяти просто хранится как последовательность переменных, ты ведь можешь обращаться к элементам массива так:
Да и в указателе я тоже могу так обращаться
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
6917 / 4110 / 939
Регистрация: 30.01.2014
Сообщений: 6,905
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++
Вопрос опытным. Имеется массив картинок TImage, который создается одной функцией. Как вызвать этот же массив из другой функции? void...

Как обратиться к элементу массива с использованием указателя - C++
Всем привет, есть некоторая задачка, которую мне очень важно решить... Дословно пишу условие в С\С++ обьявлен массив mas значений...

В чем разница массива и указателя в данной ситуации? - C++
Одно только не понятно, почему не равно если число символов одинаковое и в данном случае адрес одинаковый? В чем разница массива и...

Ошибка при передаче в функцию указателя на элемент массива - C++
#include "stdafx.h" #include <iostream> #include <ctime> #include <cstdlib> #include <cmath> const int n = 20; int...

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


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

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

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