2012-04-02 4 views
0

у меня есть:C массив 64 бит приращения

uint64_t *list; 

if((list = malloc(10 * sizeof(uint64_t))) == NULL){ 
    errx(1, "malloc"); 
} 

Мне нужно заполнить этот массив, увеличиваем адрес этого.

Я имею в виду:

(*list)++; 
list = 1; 
(*list)++; 
list = 2; 
(*list)++; 
list = 3; 
(*list)++; 
list = 4; 

Как я могу это сделать?

+0

у вас есть блок (массив), 10 uint64_t, то есть большие числа. У вас есть указатель на массив. Если вы увеличиваете «список», вы потеряете блок (массив), так что вам нужен второй указатель или просто используйте его как массив. list [0] = 1, list [1] = 2; хорошо. – gbulmer

+0

Простой для цикла? Как ... 'for (int i = 0; i <10; i ++) list [i] = (unit_64_t) i;' – Imp

+0

Извините, ребята, я забыл сказать, что я не могу использовать цикл или обычный способ: list [ 0] = 1; список [1] ​​= 2; –

ответ

3

Вы можете использовать выделенную память как обычный массив:

list[0] = 1; 
list[1] = 2; 
/* etc. */ 

Edit: Что вы делаете, это увеличивает первую запись в «массив», который, вероятно, содержит значение, Вы не делаете ожидайте, тогда вы переназначите указатель, чтобы он больше не указывал на вашу выделенную память и т. д. Кроме того, если вы действительно хотите «увеличить адрес» выделенной памяти, это просто просто, как list++, однако это также изменяет указатель, поэтому вы теряете исходный выделенный адрес и не можете освободить его позже (если вы его не сохраните).

2

вы можете использовать цикл

for(int i = 0; i < 10; i++) { 
    list[i] = i+1; 
} 
Смежные вопросы