Другие языки программирования и технологии
СИ: "int a[3]={1, 2, 3}, * p=a+1" Чему равно значение выражения "p[0]-2"? И что вообще здесь происходит?
На сколько я понял, задан массив a[3] из трех символов, но что такое * p=a+1 и p[0]-2 и как это считается?
int a[3] — это массив из трех целых чисел.
*p — это указатель на целое число. Он хранит адрес ячейки памяти, в которой записано указанное им число.
В данном случае p заставили указывать на начало массива a, но со сдвигом на один элемент вперед. То есть если взять элемент, на который указывает p, то получим p[0] == a[1]. Из этого числа вычитаем 2, получаем значение p[0]-2.
*p — это указатель на целое число. Он хранит адрес ячейки памяти, в которой записано указанное им число.
В данном случае p заставили указывать на начало массива a, но со сдвигом на один элемент вперед. То есть если взять элемент, на который указывает p, то получим p[0] == a[1]. Из этого числа вычитаем 2, получаем значение p[0]-2.
Рустембек Нигметов
Понятно, спасибо. А почему p[0] а не просто p? Первый (и по совместительству единственный) элемент в указателе, а a[1] это второй элемент массива "а", я все правильно понял? А если просто "p" указать?
вижу что всё объяснили
в дополнение посоветую книжку
Керниган, Ричи "искусство программирования на Си"
Это библия сишников от создателей языка
есть в сети -достаточно чуть погуглить
в дополнение посоветую книжку
Керниган, Ричи "искусство программирования на Си"
Это библия сишников от создателей языка
есть в сети -достаточно чуть погуглить
В общем уже ответили. Добавлю, что выражение * p=a+1 нельзя рассматривать отдельно, меняется его смысл. Чтоб смыл сохранился, надо писать так:
int* p=a+1; // объявили переменную p - указатель на int, и присвоили ей значение a+1
или так
int* p; // объявили переменную
p=a+1; // присвоили значение
Лучше читать книгу, там всё это объясняется.
int* p=a+1; // объявили переменную p - указатель на int, и присвоили ей значение a+1
или так
int* p; // объявили переменную
p=a+1; // присвоили значение
Лучше читать книгу, там всё это объясняется.
задан массив длины три и проинициализирован тремя целочисленными значениями.
далее указателю p присвоен адрес, элемента, следующего за началом массива.
значение выражения равно 0.
здесь происходит адресная арифметика.
на пальцах. пусть есть память:
XXXXX001 :
XXXXX002 :
XXXXX003 :
XXXXX004 :
XXXXX005 :
XXXXX006 :
выделяем и инициализируем массив а. память принимает вид:
XXXXX001 : XXXXX002 // значение переменной a типа int[], хранящей адрес нулевого элемента массива
XXXXX002 : 1 // 0-е значение массива
XXXXX003 : 2 // 1-е значение массива
XXXXX004 : 3 // 2-е значение массива
XXXXX005 :
XXXXX006 :
заводим переменную p и присваиваем ей a+1. память принимает вид:
XXXXX001 : XXXXX002 // значение переменной a
XXXXX002 : 1 // 0-е значение массива
XXXXX003 : 2 // 1-е значение массива
XXXXX004 : 3 // 2-е значение массива
XXXXX005 : XXXXX003 // переменная p типа int*, значение которой равно a+1
XXXXX006 :
в общем, как-то так.
далее указателю p присвоен адрес, элемента, следующего за началом массива.
значение выражения равно 0.
здесь происходит адресная арифметика.
на пальцах. пусть есть память:
XXXXX001 :
XXXXX002 :
XXXXX003 :
XXXXX004 :
XXXXX005 :
XXXXX006 :
выделяем и инициализируем массив а. память принимает вид:
XXXXX001 : XXXXX002 // значение переменной a типа int[], хранящей адрес нулевого элемента массива
XXXXX002 : 1 // 0-е значение массива
XXXXX003 : 2 // 1-е значение массива
XXXXX004 : 3 // 2-е значение массива
XXXXX005 :
XXXXX006 :
заводим переменную p и присваиваем ей a+1. память принимает вид:
XXXXX001 : XXXXX002 // значение переменной a
XXXXX002 : 1 // 0-е значение массива
XXXXX003 : 2 // 1-е значение массива
XXXXX004 : 3 // 2-е значение массива
XXXXX005 : XXXXX003 // переменная p типа int*, значение которой равно a+1
XXXXX006 :
в общем, как-то так.
Сергей Лунков
Переменная "a" не хранится в памяти, поскольку её нельзя изменить, это константный указатель. "a" просто заменяется на XXXXX002.
Похожие вопросы
- помогите пожалуйста!!3.Напишите процедуру Input(A) для заполнения массива целых чисел A размером 10 x 10: 0 0 0 ...0 0
- Как перевести эти числа буду благодарен:1)0,2122(3)-?(10) 2)3,1415(10)-?(8) 3) 0,2122(8)-?(2) 4)0,1100011(2)-?(10) (((
- Помогите вычислить логическое значение выражения. А=0, В=0, С=0
- Вычислить произведение n>=2 (n четное) сомножителей y=(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*..
- Pascal. Программа выводит 3 столбца по рядам, а нужно чтоб №1 2 3.. в столбик. Помогите.
- Excel В одной ячейке значение к примеру 20. Необходимо выполнить (1+2)^i+1 (i+1 должен продолжаться до 20 включ.)
- Чем различаются HTML-1,2,3
- Как настроить сноски в MS Word, чтобы в тексте они автоматически ставились [1],[2],[3]...,а в конце документа 1, 2, 3..
- Найдите закономерности 1,1,1,2,3,4,3,5,7_,7,_,5,9,13,_,_,16
- ПОМОГИТЕ! Нужны числа от 1 до 1 000 000 в таком порядке:. 1 2 3 4 5 6 7