Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Связь между массивами и указателями

Связь между массивами и указателями

В этом руководстве вы узнаете о связи между массивами и указателями в программировании на C. Вы также научитесь обращаться к элементам массива с помощью указателей.

Прежде чем вы узнаете о связи между массивами и указателями, обязательно ознакомьтесь с этими двумя темами:

<час>

Связь между массивами и указателями

Массив представляет собой блок последовательных данных. Напишем программу для вывода адресов элементов массива.

#include <stdio.h>
int main() {
   int x[4];
   int i;

   for(i = 0; i < 4; ++i) {
      printf("&x[%d] = %p\n", i, &x[i]);
   }

   printf("Address of array x: %p", x);

   return 0;
}

Вывод

&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448

Разница в 4 байта между двумя последовательными элементами массива x . Это потому, что размер int составляет 4 байта (в нашем компиляторе).

Обратите внимание, что адрес &x[0] и x то же самое. Это потому, что имя переменной x указывает на первый элемент массива.

<рисунок>

Из приведенного выше примера видно, что &x[0] эквивалентно x . И, x[0] эквивалентно *x .

Точно так же

<час>

Пример 1. Указатели и массивы

#include <stdio.h>
int main() {

  int i, x[6], sum = 0;

  printf("Enter 6 numbers: ");

  for(i = 0; i < 6; ++i) {
  // Equivalent to scanf("%d", &x[i]);
      scanf("%d", x+i);

  // Equivalent to sum += x[i]
      sum += *(x+i);
  }

  printf("Sum = %d", sum);

  return 0;
}

Когда вы запустите программу, вывод будет:

Enter 6 numbers: 2
3
4
4
12
4
Sum = 29 

Здесь мы объявили массив x из 6 элементов. Для доступа к элементам массива мы использовали указатели.

<час>

В большинстве случаев имена массивов превращаются в указатели. Проще говоря, имена массивов преобразуются в указатели. Вот почему вы можете использовать указатели для доступа к элементам массивов. Однако следует помнить, что указатели и массивы — это не одно и то же. .

Есть несколько случаев, когда имена массивов не распадаются на указатели. Чтобы узнать больше, посетите:Когда имя массива не распадается на указатель?

<час>

Пример 2:Массивы и указатели

#include <stdio.h>
int main() {

  int x[5] = {1, 2, 3, 4, 5};
  int* ptr;

  // ptr is assigned the address of the third element
  ptr = &x[2]; 

  printf("*ptr = %d \n", *ptr);   // 3
  printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
  printf("*(ptr-1) = %d", *(ptr-1));  // 2

  return 0;
}

Когда вы запустите программу, вывод будет:

*ptr = 3 
*(ptr+1) = 4 
*(ptr-1) = 2

В этом примере &x[2] , адрес третьего элемента, присваивается ptr указатель. Следовательно, 3 отображалось, когда мы печатали *ptr .

И, печатая *(ptr+1) дает нам четвертый элемент. Аналогично, печать *(ptr-1) дает нам второй элемент.


Язык C

  1. Какая связь между большими данными и облачными вычислениями?
  2. Указатели и массивы C++
  3. C Pass адреса и указатели
  4. C-структуры и указатели
  5. Соотношение между напряжением и током в электродвигателях
  6. Взаимосвязь между IoT и граничными вычислениями
  7. Различия между SCADA и HMI
  8. Разница между двигателями постоянного и переменного тока
  9. Разница между пайкой и пайкой
  10. Разница между 2-тактным и 4-тактным двигателями