Изменение целого числа в массиве целых чисел - PullRequest
0 голосов
/ 02 мая 2011

Если у меня есть массив int с, как я могу напрямую редактировать каждый int?

int i = arr + 1; // Getting the integer in pos 1

i это просто копия, правильно? Если я установлю i = 4, то arr + 1 все равно будет 1.

Будет ли это работать?

int *i = &(arr + 1);
*i = 4;

Ответы [ 4 ]

3 голосов
/ 02 мая 2011

Вы должны использовать операторы массива:

int i = arr[1];
arr[1] = 4;
1 голос
/ 02 мая 2011

Измените свой код на это:

int *i = arr + 1;
*i = 4;

, и он будет работать.Массивы в C являются просто указателями на первый элемент в массиве.Таким образом, arr + 0 даст адрес первого элемента в массиве, а arr + 1 - адрес второго элемента.

1 голос
/ 02 мая 2011

У вас есть:

int arr[4] = {0, 1, 2, 3};

Хотите отредактировать его дальше?

arr[0] = 42;

// arr[] = {42, 1, 2, 3};

Хотите изменить все сразу?Есть:

for(int i = 0; i < 4; ++i)
    arr[i] = i * 2;

// arr[] = {0, 2, 4, 6};

И не забудьте memset()!

memset(arr, 42, 4);

// arr[] = {42, 42, 42, 42};

Хотите изменить все, кроме первого элемента на7?

memset(&arr[1], 7, 4 - 1);

// arr[] = {42, 7, 7, 7};


Хотите узнать что-нибудь о указателях ?( Вот более полезная ссылка. )

Видите это?(Если вы не можете, пожалуйста, прекратите читать это. Спасибо!)

int *ptr = &arr[1];

Это эквивалентно:

int *ptr = arr + 1;

Что также эквивалентно:

int *ptr = arr;
ptr = ptr + 1;

Хорошо, теперь, когда мы это поняли, давайте покажем вам более эффективный цикл for, чем тот, который я делал выше:

int *ptr = arr;
for(int i = 0; i < 4; ++i)
{
    *ptr = i << 2;
    // i * 2 == i << 2

    ++ptr;
}

// arr[] = {0, 2, 4, 6};

Не то, чтобы вы так кодировали;Скорее всего, компилятор справится с этим за вас.


Хотите еще один ответ в виде серии вопросов?

0 голосов
/ 02 мая 2011

Операторы индексации массива могут делать то, что вам нужно.

arr[3] = 101; //assignment to array
int x = arr[37]; //get value from array

и т.д.

Здесь нет необходимости в арифметике памяти ..

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