Указатели и тип char
Почему в данном коде в указатель s3 записывается значение s4 а не адрес?
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
//описываем 3 строки, s3- указатель
char s2[20], *s3, s4[30];
cout << "s2="; cin >> s2; //ввод строки s2
cout << "s2=" << s2 << endl;
//запись в s3 адреса строки, где хранится s4. Теперь в переменных
//(указателях) s3 и s4 хранится значение одного и того же адреса
s3 = s4;
cout << "s3="; cin >> s3; //ввод строки s3
//вывод на экран строк s3 и s4, хотя в результате присваивния s3=s4;
//теперь s3 и s4 - это одно и тоже
cout << "s3=" << s3 << endl;
cout << "s4=" << s4 << endl;
system("pause");
}
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
В указатель s3 записывается именно адрес а не значение. Вас ввёл в заблуждение специальный сервис C++: когда вы пытаетесь напечатать указатель на символ, печатается не сам указатель (адрес памяти), а строка на которую он указывает. Если привести тип указателя к void * будет напечатан именно адрес:
// g++ -std=c++11 -pedantic -Wall -Wextra -Werror print_char_pointer.cpp
#include <iostream>
int main() {
char buffer[] = "Hello, world!\n";
char *p = buffer;
std::cout << buffer;
std::cout << p;
std::cout << static_cast<void *>(buffer) << '\n';
std::cout << static_cast<void *>(p) << '\n';
}
g++ -std=c++11 -pedantic -Wall -Wextra -Werror print_char_pointer.cpp && ./a.out Hello, world! Hello, world! 0x7ffe1861be69 0x7ffe1861be69