2016-08-02 3 views
0
#include<iostream> 
using namespace std; 

main() 
{ 
    char *p[4] = {"arp","naya","ajin","shub"}; 
    cout<<*p[2]; // How is this printing 'a' 
        // how can i print the elements of each of the 4 strings 
        // except the first character 

}Как я могу получить доступ к отдельным элементам строки в массиве указателей?

Визит http://cpp.sh/7fjbo У меня много проблем в понимании обработки указателей со строками. Если вы можете помочь с этим, напишите несколько дополнительных ссылок. Недовольство использованием массивов с указателями - моя главная проблема.

+0

Заполните его различными данными, чтобы вы могли узнать, какой 'char' он печатает. –

+0

Если вы делаете это только для практических указателей, тогда все в порядке, НО я хотел бы указать, что ISO C++ запрещает преобразование между строковой константой (и '' ajin "' именно это) и 'char *'. Вы должны использовать std :: string, если это не только для целей обучения. – Lehu

ответ

3

p [2] - указатель на первый элемент "ajin". Когда вы разыгрываете это, вы получаете a. Если вы хотите напечатать все это, используйте указатель самого

cout << p[2]; 

Если вы хотите, чтобы пропустить первые символы, передать указатель на второй символ, COUT, т.е.

cout << p[2] + 1; 
+0

Вы также можете использовать 'cout << p [2] [1]'. – Lehu

+0

@Lehu: Это будет печатать только второй символ. 'p [2] [1]' эквивалентно '* (p [2] + 1)', а не 'p [2] + 1' –

+0

Конечно, но он хотел получить доступ к отдельным символам :). Ах! В комментариях он писал о пропуске первого персонажа! – Lehu

1

Здесь p в основном массив строковых указателей с длиной массива 4.

*p[2] такой же, как p[2][0]

p[2] такой же, как «начинаются с индекса 0 и печати до компилятор находит '\0'»

p[2] + i такой же, как «начинаются с индекса i и печати до компилятор находит '\0'»

+0

Если это C++ (и это так), я бы написал, что p является массивом 'char **'. Если я вижу «указатель на строку», то для меня это «строка», что здесь не так. – Lehu

0

Некоторые больше информации в дополнение к ответу Армена чтобы дать вам лучшее понимание.

C++ - неровно C; это строго типизированный язык. В C вы используете char * для обозначения строки с нулевым символом. Но на самом деле это означает указатель на символ типа. C++, будучи сильно типизированных, является вызовом

std::ostream& std::ostream::operator<<(std::ostream& cout, char); 

с

cout << *p[2]; 

, так как второй операнд имеет тип char.

В C++ вы можете использовать std::string вместо char*, потому что первый более безопасный и имеет более простой интерфейс. Для получения дополнительной информации вы можете обратиться к Why do you prefer char* instead of string, in C++?

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