2016-02-02 4 views
-2

Я видел следующую строку кода в C++. Мне трудно понять это. Надеюсь, что я могу помочь.Указатель массива в C++

// Example program 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    int a[] = {1,2,3,4}; 
    cout<<*a+1<<; 
    cout<<a[1]; 

} 

Вопрос: Я не понимаю, как а + 1 работает. Кажется довольно неинтуитивным - добавляем ли мы 1 к массиву здесь?

+2

Если это C++, почему вы помечены [тег: с] ????? Вы пытались скомпилировать и запустить его ??? – LPs

+0

@LPs Да. Поскольку я могу запускать это как на C++, так и на C, я помещаю оба языка в тег ... – Mathemagician

+0

Насколько вы можете его скомпилировать, запустите его и посмотрите, что является результатом ... BTW gcc не скомпилирует пространства имен ... – LPs

ответ

0

Чтобы понять выражение *a+1 вы следует учитывать приоритет оператора:

разыменовать * имеет более высокий приоритет, поэтому a (имя массива является также указателем на первый элемент) разыменовывается, что дает значение 1

Затем значение 1 будет добавлено к стоимости.

приоритетов операторных описывают здесь http://en.cppreference.com/w/cpp/language/operator_precedence

0

В выражении *a + 1 массив a оценивается в контексте указателя, поэтому он указывает на первое значение в массиве.

Next, *a dereferences, указатель (то есть, он получает значение, на которое указывает указатель), и это дает вам первый элемент в массиве, который равен 1.

И наконец, 1 добавляется к этому значению и печатается, поэтому он выводит 2.

0

Прежде всего это заявление

cout<<*a+1<<; 
      ^^^^ 

синтаксически неправильно.

Я думаю, что вы имеете в виду что-то вроде

cout << *a+1 << endl; 

Expression *a эквивалентно a[0]. Таким образом, вы могли бы написать вместо

cout << a[0] + 1 << endl; 

Примите во внимание, что семантически a[0] + 1 не то же самое, как a[1] хотя применительно к вашему примеру оба выражения будут давать один и тот же результат. :)

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