Почему у = х не работает для массивов? - PullRequest
0 голосов
/ 17 марта 2010

Почему следующий код C не скомпилируется? Кажется, что он должен просто изменить адрес указателей, но он выдает ошибку.

int x[10];
int y[10];
y=x;

Ответы [ 5 ]

10 голосов
/ 17 марта 2010

x и y - это массивы, а не указатели. В C массивы не могут изменить размер или местоположение; только их содержимое может измениться. Вы не можете назначать массивы напрямую.

Если вам нужен указатель на один из массивов, вы можете объявить его следующим образом.

int *z = x;

Если вам нужно назначить массив, вы можете создать структуру, которая содержит массив. struct s назначаются в C.

7 голосов
/ 17 марта 2010

Какие указатели? У вас есть два массива. Массивы не указатели. Указатели хранят адрес одной переменной в памяти, в то время как массивы представляют собой непрерывный набор элементов до указанного размера.

Тем не менее, массивы не могут быть назначены. Возможно, говоря, что y = x может скопировать каждый элемент из x в y, но это опасно (случайно сделайте дорогую операцию с чем-то простым, выглядящим как назначение). Вы можете сделать это вручную, хотя:

for (unsigned i = 0; i < 10; ++i)
    y[i] = x[i];
4 голосов
/ 17 марта 2010

у статически выделено. Вы не можете изменить, куда он указывает.

1 голос
/ 17 марта 2010

Поскольку массив является (имеет) указатель значение (rvalue), но не является указателем переменная (lvalue).

int a[10];
int *p;
p = a;   // OK
a = p;   // Compile Error
0 голосов
/ 17 марта 2010

y - это не «указатель», а фиксированный массив. Вы должны рассматривать это как «константу типа int *», поэтому вы не можете изменить значение константы

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...