2017-01-11 2 views
1

В следующей программе сохраненная строка изменяется с использованием cin, изменяя таким образом адрес. Адрес первого элемента строки представлен s. Адрес первого элемента - это сама строка. Таким образом, он был изменен при вводе новой строки. Когда я пытаюсь вывести &s[0] в cout, он дает целую строку.Как вы можете получить постоянный указатель на первый символ в массиве символов?

#include<iostream> 
using namespace std; 
int main() { 
    char s[6]; 
    cin >> s; // say abcde 
    cout << s ; 
    cout << &s[0] ; // gives abcde 

    cin >> s; // say stack 
    cout << s; 
    cout << &s[0] ; gives stack 
} 
+2

И какой адрес меняется точно? – DeiDei

+0

Non sequitur. Строка, хранящаяся в массиве, изменяется. Это не связано с его адресом. –

+0

Вы действительно должны прочитать [хорошую книгу на C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list?lq=1). –

ответ

2

Адрес не меняется, данные, хранящиеся по адресу, изменяются. Причина, по которой печатается вся строка, заключается в том, что вы передаете указатель на cout, и массив может быть передан функции (или потоку), указав указатель на первый элемент. Передача указателя на первый символ похожа на передачу строки в стиле C. Если вы хотите напечатать адрес первого символа, вам необходимо наложить указатель на void*: cout<<(void*)&s[0] (это напечатает адрес первого символа).

+0

@Quentin Я исправил это, теперь лучше? – theo2003

+0

@Quentin Я тоже это исправлю, спасибо! (серьезно) EDIT: Это лучше? – theo2003

+0

Да, я перевернул свой голос. Спасибо за ваше время :) – Quentin

Смежные вопросы