Не могу разобраться. К примеру, вот такой фрагмент кода:
char* x = "Hello";
Что такое char*? Какой-то особый тип данных? Окей, по синтаксису x -- указатель на значение "Hello".
Фрагмент кода:
cout << "The value of x: " << x << endl;
Выводит именно Hello, а не адрес памяти литерала.. . Блин, совсем запутался :D
Ну, а если попытаться получить значение литерала по указателю, который запоминает значение литерала :D, вот так:
cout << *x;
...то на выходе получаем первый символ строкового литерала -- "H" -- как будто x -- это массив.. .
ЗЫ: Если пишем как-то так, то это ну прям понятно )))
char s[ ] = "Hello";
просто создается символьный массив, а вот с первым вариантом никак не разберусь...
Другие языки программирования и технологии
[C++] char && char* && char[ ]
char* x = "Hello"; и char s[ ] = "Hello"; - считай, одно и то же.
x и s- указатели на char, длина определяется из пост условия.
cout << *x; - вывести значение по адресу x. можешь попробовать cout << *(x+1); и т. д.
cout << "The value of x: " << x << endl; выводит Hello потому что ты и просишь его вывести строку.
если нужен адрес - можешь, например, воспользоваться printf( "%p", x )
давай лучше через почту
x и s- указатели на char, длина определяется из пост условия.
cout << *x; - вывести значение по адресу x. можешь попробовать cout << *(x+1); и т. д.
cout << "The value of x: " << x << endl; выводит Hello потому что ты и просишь его вывести строку.
если нужен адрес - можешь, например, воспользоваться printf( "%p", x )
давай лучше через почту
Здесь ощущается разница.. .
#include <iostream>
using namespace std;
int main() {
char arr[] = "Hello";
char * ptr = "Hello";
int size_arr, size_ptr;
size_arr = sizeof(arr);
size_ptr = sizeof(ptr);
cout << "size_arr = " << size_arr << endl << "size_ptr = " << size_ptr;
cin.get();
return 0;
}
Во втором случае ничего не известно о размере строки. Попытка вычислить выдаёт размер самого указателя, который является int, хотя и указывает на char
#include <iostream>
using namespace std;
int main() {
char arr[] = "Hello";
char * ptr = "Hello";
int size_arr, size_ptr;
size_arr = sizeof(arr);
size_ptr = sizeof(ptr);
cout << "size_arr = " << size_arr << endl << "size_ptr = " << size_ptr;
cin.get();
return 0;
}
Во втором случае ничего не известно о размере строки. Попытка вычислить выдаёт размер самого указателя, который является int, хотя и указывает на char
Запомни. Имя массива (этикетка) - это всегда указатель на первый элемент массива и не важно какой будет тип.
Что такое строка ?? -это массив символов. Ты можешь объявить либо указатель на строку, либо массив символов, суть одна. т. к повторю имя массива - это указатель на первый элемент.
Почему же в первом варианте у тебя возникает ошибка при присваивании элементу строки. Это зависит от реализации компилятора, когда ты объявляешь указатель на строку, он помещает эти данные в неизменяемую область памяти. Фактически у тебя получается константная строка.
Поэтому предподчительней второй способ.
Что такое строка ?? -это массив символов. Ты можешь объявить либо указатель на строку, либо массив символов, суть одна. т. к повторю имя массива - это указатель на первый элемент.
Почему же в первом варианте у тебя возникает ошибка при присваивании элементу строки. Это зависит от реализации компилятора, когда ты объявляешь указатель на строку, он помещает эти данные в неизменяемую область памяти. Фактически у тебя получается константная строка.
Поэтому предподчительней второй способ.
Похожие вопросы
- c++ возврат char из функции
- C++, вывод char в file.
- что такое var c: char; в паскале? что такое var c: char; в паскале?
- C++ char arrays - прошу помощи с задачей.
- с++ внутри. Как из int преобразовать в char и *char и обратно. И есть ли аналог функций switch(a) где a не char a int?
- чем отличаются char* и char в с++? что это такое?
- Вывести название массива с помощью char, C++
- C++ как переменную (signed int) разделить на старший и младший байт, а после записать в 2е другие переменные типа char?
- C++ Про выбор типа данных. Int, char и т. д.
- C++ Windows Form как ввести в переменную слово, пробовал char - не работает char n; n="1"; - тут возникает ошибка