Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C/C++] differenza liste a puntatori

    Codice PHP:
    #include <stdio.h>   /* per printf */
    #include <stdlib.h>  /* per malloc */
     
    typedef struct ns {
            
    int data;
            
    struct ns *next;
    node;
     
    node *list_add(node **pint i) {
        
    node *malloc(sizeof(node));
        
    n->next = *p;
        *
    n;
        
    n->data i;
        return 
    n;
    }
     
    void list_remove(node **p) { /* rimuove head */
        
    if (*!= NULL) {
            
    node *= *p;
            *
    = (*p)->next;
            
    free(n);
        }
    }
     
    node **list_search(node **nint i) {
        while (*
    != NULL) {
            if ((*
    n)->data == i) {
                return 
    n;
            }
            
    = &(*n)->next;
        }
        return 
    NULL;
    }
     
    void list_print(node *n) {
        if (
    == NULL) {
            
    printf("la lista è vuota\n");
        }
        while (
    != NULL) {
            
    printf("print %p %p %d\n"nn->nextn->data);
            
    n->next;
        }
    }
     
    int main(void) {
        
    node *NULL;
     
        
    list_add(&n0); /* lista: 0 */
        
    list_add(&n1); /* lista: 1 0 */
        
    list_add(&n2); /* lista: 2 1 0 */
        
    list_add(&n3); /* lista: 3 2 1 0 */
        
    list_add(&n4); /* lista: 4 3 2 1 0 */
        
    list_print(n);
        
    list_remove(&n);            /* rimuove il primo elemento (4) */
        
    list_remove(&n->next);      /* rimuove il nuovo secondo (2) */
        
    list_remove(list_search(&n1)); /* rimuove la cella che contiene 1 (primo) */
        
    list_remove(&n->next);      /* rimuove il successivo (0) */
        
    list_remove(&n);            /* rim
    uove l'ultimo (3) */
        
    list_print(n);
     
        return 
    0;

    Questo codice se lo compilo con gcc va, con g++ no:

    [bonzo@wolverine Desktop]$ g++ -c lista.cpp
    lista.cpp: In function ‘node* list_add(node**, int)’:
    lista.cpp:10: error: invalid conversion from ‘void*’ to ‘node*’
    [bonzo@wolverine Desktop]$ gcc -c lista.cpp
    lista.cpp: In function ‘node* list_add(node**, int)’:
    lista.cpp:10: error: invalid conversion from ‘void*’ to ‘node*’
    [bonzo@wolverine Desktop]$ gcc -c lista.c
    [bonzo@wolverine Desktop]$


    Cos'è che non va?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Risposta veloce (vado di fretta )
    Il C++ richiede sempre un cast al tipo di destinazione, mentre il C no.

    Codice PHP:

    node 
    *malloc(sizeof(node));  // ok per il C, no per il C++

    node *= (node*) malloc(sizeof(node)); // ok per il C++ 

  3. #3
    Grazie mille, mi dovrò studiare un po' questa differenza.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Nel linguaggio "C" esiste una conversione implicita da un puntatore a void (void*) a un puntatore ad altro tipo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2024 vBulletin Solutions, Inc. All rights reserved.