Это неверно. a[3]
есть 1
, а не 6
.
Вот объяснение построчно:
int a[5] = 0,1,4,89,6;
int *p = a; //'p points at the start of a'
p[3] = 1; //'a[3] is now 1 not 6'
Первая строка инициализации массива. Я думаю, что должно быть {} вокруг чисел, но если компилируется с вами, тогда все в порядке. Это, как я считаю, что это должно быть:
int a[5] = {0,1,4,89,6};
Вторая строка создать указатель на Int p
и инициализировать его в адрес a
. Массивы и указатели тесно связаны с C, поэтому теперь у вас есть 2 переменные a
и p
, указывающие на один и тот же адрес памяти.
Третья линия - установить p[3]
в 1
, на этот раз вы получаете доступ p
в виде массива междунар (возможно из-за этого отношения между массивами и указателями). Поскольку p
и a
точек в тот же адрес памяти, это означает, что a[3]
теперь 1
Также замечания неверны, должны быть/* */или //.
UPDATE: комментарий
Давида очень важно.
Массивы представляют собой последовательную зарезервированную память, способную хранить несколько значений массива, в вашем случае 5 int.
Указатель является указателем и может указывать везде, где они могут указывать на Int переменная:
int a = 5;
int *b = &a;
или они могут указывать на массив, как в вашем случае. В обоих случаях вы сможете использовать [], но в случае, если он указывает на одно значение, любой индекс массива больше нуля будет неправильным, например.
int a = 5;
int *b = &a;
*b = 4; // OK.
b[0] = 4; // OK.
b[1] = 4; // compiles correctly, but is **wrong**.
// it will overwrite something in memory
// and if program not crash,
// it will be security hole.
int x[10];
int *y = x;
*y = 4; // works correctly for y[0],
// but makes it difficult to read.
y[0] = 5; // OK
y[9] = 5; // OK
y[10] = 5; // compiles correctly, but is **wrong**.
// it is after last element of x.
// this is called **buffer overflow**.
// it will overwrite something in memory
// and if program not crash,
// it will be security hole.
UPDATE:
Я рекомендую проверить эту статью
http://boredzo.org/pointers/
Я думаю, что '5 [а]' такой же, как 'а [5]' andI'm право:) –
yea 5 [a] тот же, что и [5], потому что 5 + a тот же, что и + 5. Но не то, что Tarius спрашивает – Nick
Tarius - можете ли вы добавить тег C или C++ (или язык, который вы используете, поскольку он может быть C с классами или C--) – Nick