Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Указатели в С
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Valensiya Valensiya вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.07.2022
Question Указатели в С - 16.07.2022, 11:02

c Код:
#include <stdio.h>
void main(void)
{
  int a[100], n, *end, *p,k=0;
  n=10;
  end = a + n;
  printf("end %p\n a = %p n= %d\n", end,a,n);  
  for (p = a; p < end; p++)      
  {
    printf("%4d   %p  %d\n" , *p,p,k++);
  }
}

Я нашла в интернете этот код и у меня есть нсколько вопросов:
1. В строке end = a+n к массиву а прибавилась переменная n=10, что это значит? Добавилось 10 ячеек? В переменную end записался адрес, это адрес, где находится
массив?
2. Я вывела значение а - вывелся адрес. а было массивом, а стало адресом?
3. В цикле p = a, т.е. в переменную р сохранился адрес из а, а дальше p<end. p++.
end - это тоже адрес, значит к адресу будет прибавляться 1 (как?) до тех пор, пока
p не станет равным либо большим, чем end? Просто уточняю
Ответить с цитированием
  (#2 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 8,106
Сказал(а) спасибо: 27
Поблагодарили 1,051 раз(а) в 1,030 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 17.07.2022, 10:10

1. В переменную end (указатель) поместилось значение, указывающее на начало массива a, но смещённое на 10 ячеек (размер ячейки массива, int; не 1 байт, а в зависимости от платформы и компилятора). По простому - указатель указывает теперь на 10-й элемент массива.
2. Переменную "имя массива" можно конвертировать в указатель. Саму по себе переменную можно считать указателем на область памяти, где располагается нулевой элемент массива. Если интересует, как правильно, надо стандарт Си читать.
3. В p поместился адрес начала массива, нулевого элемента. Далее end - адрес 10-го элемента. Цикл идёт, пока указатель p не достигнет нужного элемента.

В данной задаче эти конструкции приведут к одному результату:
c Код:
int *p = a;
int *p = &a[0]

c Код:
int *p = a + 10;
int *p = &a[10]

c Код:
*p = 3;
a[0] = 3;

c Код:
*(p + 2) = 5;
a[2] = 5;


Как прикреплять картинки к сообщениям: http://www.hardforum.ru/t116562

Последний раз редактировалось Rius; 17.07.2022 в 10:20
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели Steward Вопросы начинающих программистов 2 03.04.2019 22:53
Умные указатели С++ lime389 С/С++ 0 04.12.2012 22:46
Функции и указатели Phoenix05 Задания за деньги 2 06.07.2012 21:03
Расставить указатели в программе Linhost Вопросы начинающих программистов 0 21.12.2010 18:22
Указатели.Динамическая память Solnze2 Pascal 0 11.06.2010 10:55
Указатели и многомерные массивы rusl Вопросы начинающих программистов 7 09.06.2009 10:49
Задачка на массивы и указатели rum777 Вопросы начинающих программистов 3 04.05.2009 18:33
Наследование, указатели, объекты D_K С/С++ 9 30.07.2008 20:05
Умные указатели в C++ Garik Языки программирования 0 21.04.2008 13:45
Указатели, ссылки как их делать Bar С/С++ 18 05.03.2008 02:15
Указатели, списки MFC Ikanu Visual C++ 1 26.06.2006 12:35
Ограничения на указатели в VC++ 6.0 GI Visual C++ 1 24.04.2004 14:43



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов