Основное использование указателя - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь написать функцию, которая принимает пустой указатель на int, а затем удваивает int и помещает его обратно в область памяти:

void doubleNumber(void *number){
    number = &((*((int*)(number))) * 2);

} 

Итак, сначала я приведу его вint * из void *, затем я задерживаю int *, чтобы получить значение, затем умножаю на 2 и затем получаю адрес этого, чтобы вернуть его в указатель.

Может кто-нибудь дать мне советы, почему моя логика не работает?

Спасибо

Ответы [ 4 ]

4 голосов
/ 18 октября 2011

Я бы написал так:

void doubleNumber(void *number){
    *(int*)number *= 2;
}

Прежде всего приведите number к типу int*.Затем разыщите указатель.Затем удвойте его.

Проблема с вашим кодом в том, что вы назначаете указатель, а не указатель.

3 голосов
/ 18 октября 2011

Шаг 1:

void doubleNumber(int *value) {
    *value = 2 * (*value);
}

Шаг 2:

void doubleNumber(void *value) {
    int * ivalue = (int *)value;
    *ivalue = 2 * (*ivalue);
}
0 голосов
/ 18 октября 2011

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

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

0 голосов
/ 18 октября 2011

Значение (например, 2) не имеет адреса.

Вместо этого просто напишите:

* (*int)number = *(int*) number) * 2;

или, короче:

* (*int)number *= 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...