Не могу разобраться с const char*. C++

74
13 марта 2022, 13:40

Чтобы лучше описать мою дилемму, приведу примеры. Рассмотрим такой код.

#include <iostream>
using std::cout;
using std::endl;
void tostr(const int* strr) {
  cout << strr << endl;
  cout << *strr << endl;
  cout << &strr << endl;
}
int main(int argc, char const *argv[]) {
  int a = 55;
  int *p = &a;
  tostr(p);
  return 0;
}

Здесь всё поняно: const int* - это указатель. Мы передаем функции указатель на а равное 55. strr выдает адрес памяти переменной а, *strr разыменовывает адрес переменной а и выдаёт 55, &strr выдает адрес памяти переменной р со значением адреса памяти переменной а.

Но. Рассмотрим следующий код:

#include <iostream>
using std::cout;
using std::endl;
void tostr(const char* strr) {
  cout << strr << endl;
  cout << *strr << endl;
  cout << &strr << endl;
}
int main(int argc, char const *argv[]) {
  tostr("abs");
  return 0;
}

const char* так же указатель. Но почему мы можем передавать функции строку, а не указатель на неё, причем даже не символ, а целую строку? Ведь если бы по такому принципу в предыдущем примере передали бы не указатель, а число, то нам бы вывалилась ошибка, мол невозможно преобразовать int в int*.

Почему здесь это работает и, самое главное, как с этим работать, ибо в этом случае strr выдает не адрес памяти, как должно было бы быть, а саму сроку?

В этом примере единственное, что работает понятно - *strr, ибо strr - указатель на char и при разыменовании ожидаемо получаем char, в данном случае - первую букву а. Хорошо, &strr то же понятно - выводит адрес переменной strr.

READ ALSO
Можно ли повесить в динамической ссылке, в popup окне ajax-form заблокировать кнопку?

Можно ли повесить в динамической ссылке, в popup окне ajax-form заблокировать кнопку?

Подскажите пожалуйста, есть ссылка создана yf jQuery, нажав на которую открывается в popup окне форма обратной связи mailphp, тоже создана с помощью...

178
Проблемы со Scanner&#39;ом в Java

Проблемы со Scanner'ом в Java

После ввода данных файл (case 1) хочу вывести на экран цифры содержащиеся в нём(case 2), первый раз получается это сделать, а вот второй уже нет, в чём...

287
как после прочтения текстового файла в webView занести информацию в sqlite андройд

как после прочтения текстового файла в webView занести информацию в sqlite андройд

у меня есть файл txt в первичной внешней памяти(не съемной)андройдая вывожу текст в webView как мне его положить в базу данных sqlite? пишут что то про...

173