Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: [c++] puntatori

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107

    [c++] puntatori

    ciao!
    ho problemi con i puntatori..
    uso la CopyMemory per unire 32 elementi di una lista; questo e' quello che faccio:

    void* pBuffer = new char[32768];
    DWORD dwPosInBuffer = 0L;
    POSITION pos_prima;
    POSITION pos = m_listOfBuffer.GetHeadPosition();
    contatore_pos = 0;

    while (contatore_pos <= 31)
    {
    pos_prima = pos;
    CWaveBuffer* p_waveBuffer = (CWaveBuffer*) m_listOfBuffer.GetNext(pos);

    CopyMemory( (char*)pBuffer + dwPosInBuffer, p_waveBuffer->GetBuffer(), 1024 );

    dwPosInBuffer += 1024;

    m_listOfBuffer.RemoveAt( pos_hashlk );
    contatore_pos++;
    }

    ..adesso mi serve leggere il contenuto di quei 32 elementi della lista..
    io conosco pBuffer che secondo me rappresenta l'indirizzo del primo elemento..
    visualizzandolo, ho che:
    pBuffer=00CC0068
    &pBuffer=0012FE60

    come faccio a prendere il valore contenuto in quella cella di memoria??.. sapendo che la dimensione e' di 2Byte..

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    sapendo che questo è l'indizizzo dinamico di base 0012FE60
    che ti viene fornito da un puntatore
    basta che ti fai un ciclo e ti copi in una variabile
    a 16bit quel valore e poi incrementi il puntatore di 2 :-/

    o forse nn ho capito io bene? :-|

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107
    il mio problema e' che non ho capito bene i puntatori..
    se il valore di pBuffer e' un indirizzo (00CC0068) come faccio a prendere il contenuto di quella cella di memoria??..

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Forse la faccio troppo semplicistica... ma se 'p' è un puntatore il contenuto della locazione della memoria puntata da 'p' è '*p'
    codice:
    int a, *p;
    a = 25;
    p = &a;
    printf("Indirizzo di 'a': %d; valore di 'a':%d", p, *p);
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107
    questo e' ok ma nel mio caso nella riga dove faccio:

    cout << *pBuffer;

    mi da quest'errore:

    C:\Programmi\Microsoft Visual Studio\MyProjects\MFC\command_line\hashlk\WaveIn.c pp(673) : error C2100: illegal indirection

    e non capisco dove e' la differenza da quello che hai scritto tu..

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non capisco perchè tu abbia dichiarato pBuffer come puntatore void... :master:

    Perchè non dichiararlo come puntatore a char?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107
    in realta' semplicemente perche' uso una funzione simile in un altro pezzo del programma dove mi serve che sia void..
    qua effettivamente non ha significato..

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107
    che ne dite di qualcosa del genere??:

    short aaa[16384];
    for(int cont_buff=0;cont_buff<=16384-1;cont_buff++)
    {
    aaa[cont_buff] = (short)*pBuffer_hashlk;
    pBuffer_hashlk = pBuffer_hashlk + 2;
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107
    ..e' normale che sia short che float mi diano gli stessi risultati??
    ..comunque non sono quelli giusti..

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107
    ciao!
    sono ancora qua con questo problema..
    ho messo pBuffer come puntatore a char:
    char* pBuffer = new char[32768];

    il CopyMemory e' come prima:
    CopyMemory( pBuffer + dwPosInBuffer, p_waveBuffer->GetBuffer(), 1024);

    il resto sta cambiando..:

    signed short int aaa[16384];
    for(int cont=0;cont<=16384-1;cont++)
    {
    aaa[cont]=(unsigned short)*pBuffer*256+(unsigned short)*(pBuffer+1);
    pBuffer = pBuffer + 2;
    }

    ma cosi' ho parecchi problemi perche' in ingresso (p_waveBuffer->GetBuffer()) posso avere valori sia positivi che negativi..

    secondo me sarebbe meglio leggere i 2 byte insieme come un'unica stringa di caratteri e poi convertire la stringa cosi' trovata in INT16 (= signed short int).. ma il mio problema e': come si fa a leggerli insieme?? e poi a convertire??

    grazie e ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.