PDA

Visualizza versione completa : void *buffer


karmo
15-04-2006, 13.48.25
allora:
ho una funzione strutturata in questo modo:
void* memset( void* buffer, int ch, size_t count );

mentre nel main ho:
char stringa[512];

se faccio
memset((void * const)stringa, '\0', sizeof(stringa));

allora non ho problemi, ma:
memset((void &)stringa, '\0', sizeof(stringa));
invece non va!
il & non è un altro modo di scrivere *const ? cioè un puntatore costante a un variabile di tipo ...

se invece:
memset(&stringa, '\0', sizeof(stringa));
va nuovamente bene! ma non ho dichiarato che è di tipo void come vuole la funzione!
quindi quando la funzione vuole un parametro void* buffer chiede in ingresso un puntatore a una variabile di qualsiasi tipo che specifico io!è giusto dire cosi?

wilhelm
24-04-2006, 14.20.28
Void* è un puntatore non tipizzato, puoi farlo puntare a qualsiasi tipo di dato.

Non puoi invece compiere alcune operazioni tipiche dei puntatori tipizzati invece.

boyashi
24-04-2006, 15.28.24
l'operatore & viene usato nel passaggio di parametri per riferimento o per passare l'indirizzo fisico stesso della variabile a cui è applicato.

"void &" non va perchè, invece di passare un puntatore al blocco di memoria, cerca di passare il blocco di memoria facendo un passaggio per riferimento. Questa cosa il compilatore te la blocca perchè la funzione accetta un puntatore come 1° parametro ( devi rispettare la definizione della funzione che chiami ).

se vuoi passare il puntatore alla memoria come riferimento devi usare

void*&

nel tuo caso:
memset((void*)&stringa,'\0',512);

ma un'operazione del genere su un puntatore non è necessaria, perchè non devi modificare il puntatore stesso. Questo tipo di passaggio viene di solito usato per variabili definite nella funzione chiamante e che si vogliono modificare in quella chiamata.

Esempio:


#include <iostream>
using namespace std;

void test_fun(int& t) {
t = 10;
}

int main(int argc, _TCHAR* argv[])
{

int p;
test_fun(p);
cout << p; //ora p contiene il valore 10
return 0;
}