Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
1

Указатель на элемент массива

16.07.2010, 14:10. Показов 6082. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Возникла проблемка... грубо говоря есть два массива x и y, как к примеру указателю x[i] присвоить указатель y[i]? через &x[i] не дается
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2010, 14:10
Ответы с готовыми решениями:

Создать указатель на элемент массива
Как создать указатель на элемент a Например у меня элемент a выглядит так: *(*(a + i) + j)

Почему мы не разыменовываем указатель на элемент массива?
int *ptrarray = new int ; for (int i = 0; i < 10; i++) { ptrarray = i; ...

Заставить указатель указывать на нулевой элемент массива
Вроде бы и простой вопрос для начинающих, но почему-то не могу найти на него ответ. Есть функция...

Как передвигать указатель на следующий элемент массива структур?
Вопрос относительно использования символа стрелка '->'. Допустим, есть такой код:...

25
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297
16.07.2010, 14:21 2
Напиши как делаешь...
Может так?
C++
1
2
3
4
5
int x[3], y[3], *p;
    p = &x[2];
    ...// использование p как указ на x.
    p = &y[2];
    ...// использование p как указ на y.
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
16.07.2010, 14:27  [ТС] 3
C++
1
2
3
4
bool Neuron::SetInput(float *X)
{
    for(int i=0;i<n;i++) &x[i]=&X[i];
...
float* x - в самом классе

ошибка
'=' : left operand must be l-value
как понимаю это значит левому операнду нельзя ничего присваивать
вечная путаница с указателями
0
16 / 16 / 2
Регистрация: 31.07.2009
Сообщений: 54
16.07.2010, 14:30 4
Цитата Сообщение от KuKu Посмотреть сообщение
как понимаю это значит левому операнду нельзя ничего присваивать
Нет, это значит что тут у Вас НЕТ левого операнда вообще. Чему присваивать-то?
1
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297
16.07.2010, 14:33 5
Как по мне если float x - просто массив то так можно
C++
1
2
3
4
bool Neuron::SetInput(float *X)
{
        for(int i=0;i<n;i++) x[i] = * X[i];
...
1
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
16.07.2010, 14:40  [ТС] 6
Цитата Сообщение от Skoi Посмотреть сообщение
Нет, это значит что тут у Вас НЕТ левого операнда вообще. Чему присваивать-то?
м...
&x[i]=&X[i];
&x[i] - левый, &X[i] - правый, или я не так вас понял ?

Цитата Сообщение от FireNovel Посмотреть сообщение
Как по мне если float x - просто массив то так можно
C++
1
2
3
4
bool Neuron::SetInput(float *X)
{
        for(int i=0;i<n;i++) x[i] = * X[i];
...
мы же тут просто присваиваем значения, а не указатели
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
16.07.2010, 14:42 7
Цитата Сообщение от KuKu Посмотреть сообщение
мы же тут просто присваиваем значения, а не указатели
Ничего другого у тебя не выйдет. Только обменять значения.
0
16 / 16 / 2
Регистрация: 31.07.2009
Сообщений: 54
16.07.2010, 14:43 8
Цитата Сообщение от KuKu Посмотреть сообщение
&x[i] - левый
А что это такое? Левым операндом это быть не может никак.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
16.07.2010, 14:44 9
Цитата Сообщение от Skoi Посмотреть сообщение
Нет, это значит что тут у Вас НЕТ левого операнда вообще. Чему присваивать-то?
Куда делся? l-value и левый операнд - разные вещи.
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
16.07.2010, 14:44 10
KuKu, то что вы хотите сделать в приницпе невозможно
потому что указатель на x[i] формируется в процессе программы
&x[i]= &x+i*sizeof(<тип элемента>);
это невозмлжно, да и не понятнозачем это вообше нужно
можно например зранить в массиве не значения а указатели
int* x[100];
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.07.2010, 14:48 11
Цитата Сообщение от KuKu Посмотреть сообщение
Добрый день! Возникла проблемка... грубо говоря есть два массива x и y, как к примеру указателю x[i] присвоить указатель y[i]? через &x[i] не дается
Еще можно так:
C
1
2
int arr[3];
int* p=arr+3;
1
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297
16.07.2010, 14:52 12
Цитата Сообщение от KuKu Посмотреть сообщение
мы же тут просто присваиваем значения, а не указатели
А какой смысл присваивать, каждому адресу элемента одного массива - адрес каждого эл-та другого массива. Чёто я не понимаю
Не проще ли сделать как-то так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Neuron
{float *x;
int array_size; // чтобы 
...
};
bool Neuron::SetInput(float *X, int n)
{
        x = X;
        array_size = n;
}
 
int main()
{
float a [4];
 
...  SetInput(a, 4);
 
}
1
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.07.2010, 14:53 13
Цитата Сообщение от KuKu Посмотреть сообщение
&x[i] - левый, &X[i] - правый, или я не так вас понял ?
l-value - это объект, или переменная, r-value - некоторое значение (но не переменная).
Попытка провести присваивание &x[i] = &X[i] равносильна попытке присвоить числу 5 значение некоторой переменной.
1
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
16.07.2010, 14:56 14
KuKu, короче это не возможно!
и кстати, ты классное название темы придумал
в массиве нет членов, есть элементы
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
16.07.2010, 14:58  [ТС] 15
есть входящие данные пусть это массив X, они используются сразу в нескольких местах... грубо говоря
y[0]=x[0]
y[1]=x[1]
y[2]=x[2]

z[0]=x[1]
z[1]=x[0]
z[2]=x[1256]

И таких массивов как y,z много, и что бы десять раз не перезаписывать массивы y,z при изменениях X надо что то с указателями

Добавлено через 52 секунды
Цитата Сообщение от D@rkD@iver Посмотреть сообщение
KuKu, короче это не возможно!
и кстати, ты классное название темы придумал
в массиве нет членов, есть элементы
спасибо, долго слово подбирал ... а я думаю что столько народу сразу пришло
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
16.07.2010, 15:02 16
KuKu, в этом случае советую сделать массивы указателей
int* x[100];
int* y[100];
int* z[100];

y[0]= x[0];
z[0]= x[0];
и вуаля они все указывают на один элемент
P.S. не забывай выделять память под элементы
1
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
16.07.2010, 15:06  [ТС] 17
Ладно вроде понял, всем спасибо. А что там за дебаты были по поводу левого операнда, так и не ясно
0
16 / 16 / 2
Регистрация: 31.07.2009
Сообщений: 54
16.07.2010, 15:08 18
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Куда делся?
Куда делся - лучше узнать у автора.
Ну если конечно неправильный операнд - тоже операнд, тогда да... но думаю это нонсенс.
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
16.07.2010, 15:11  [ТС] 19
Skoi, ваши туманные высказывания сводятся к тому, что сказал
Nameless One, или что то другое ?
0
113 / 113 / 13
Регистрация: 01.10.2008
Сообщений: 876
16.07.2010, 15:13 20
KuKu, смотри
&a- это не переменая, а значение
то есть что такое a для компилятора?
это просто число, адрес и его невозможно поменять
&a= 8 для компилятора тоже самое что и 53233= 8
советую тебе пучить ассемблер, там все сразу встант на свои места
0
16.07.2010, 15:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2010, 15:13
Помогаю со студенческими работами здесь

Может ли указатель показывать на последний элемент массива, а не на первый?
Люди!!!! подскажите! может ли указатель показывать на последний элемент массива, а не на...

Функция должна возвращать указатель на первый элемент массива,удовлетворяющий условию
Функция должна возвращать указатель на первый элемент массива,удовлетворяющий условию(в данном...

Вывести минимальный элемент введенного с клавиатуры массива целых чисел (через указатель)
Как написать программу, которая выводит минимальный элемент введенного с клавиатуры массива целых...

Приведение любого двумерного массива к типу указатель на указатель
Допустим, есть несколько массивов int arr1; int arr2; int arr3; Какое преобразование нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru