C ++ арифметика с указателями - PullRequest
0 голосов
/ 21 марта 2010

Я пытаюсь добавить следующее:

У меня есть массив двойных указателей, называемых A. У меня есть еще один массив двойных указателей, называющих его B, и у меня есть целое число без знака, называющее его C.

Итак, я хочу сделать:

A[i] = B[i] - C;

как мне это сделать? Я сделал:

A[i] = &B[i] - C;

Не думаю, что я делаю это правильно.

Edit: что я хочу сделать, это взять значение по индексу i массива двойных указателей и вычесть из него int, а затем сохранить этот результат в массив двойных указателей по индексу i.

Ответы [ 3 ]

4 голосов
/ 21 марта 2010

Ваш вопрос немного неясен, но если A и B являются массивами указателей, которые удваиваются, и вы хотите изменить каждый указатель с фиксированным количеством, равным C, то для каждого элемента в A:

A [i] = B [i] - C;

должен это сделать.& B [i] берет адрес самого указателя, так что это совершенно другая вещь.

пример кода:

для (int i = 0; i

0 голосов
/ 22 марта 2010

То, что вы хотите:

&( *B[i] - C )

Но я думаю, что вы не можете назначить это напрямую A [i]. Сначала вы должны создать временный (T) массив double.

for(int i=0; i< size_of_B; i++){
  T[i] = *B[i] - C;
}
for(int i=0; i< size_of_T; i++){
  A[i] = &T[i];
}
0 голосов
/ 21 марта 2010

C ++ не имеет простого синтаксиса для отображения, вы либо

(1) Использовать цикл

for (int i = 0; i < 1482; ++ i)
  A[i] = B[i] - C;

(2) Используйте std::transform in <algorithm>:

#include <functional>
#include <algorithm>
...
std::transform(B, B+1482, A, std::bind2nd(std::minus<double>(), C));

(может быть библиотека Boost, чтобы упростить это.)

...