Comment parcourir un tableau à l'aide d'un pointeur et d'une longueur inconnue?

J'ai reçu une api c et de travailler avec le minimum de documents.
Développeur n'est pas le moment, et son code est le retour des valeurs inattendues (matrices non de la durée prévue)

Im avoir des problèmes avec des méthodes qui renvoient des pointeurs vers des tableaux et je me demandais suis-je une itération sur eux correctement.

Q:est-ce la suivant toujours le bon len d'un tableau?

int len=sizeof(sampleState)/sizeof(short);
int len=sizeof(samplePosition)/sizeof(int);

 typedef unsigned char byte;
 int len=sizeof(volume)/sizeof(byte);

Et je itérer sur le tableau à l'aide du pointeur et l'arithmétique des pointeurs (suis-je la faire correctement pour tous les types ci-dessous)

Et le dernier exemple ci-dessous tableau multidimensionnel? Quel est le meilleur moyen pour parcourir au cours de cette?

grâce

//property sampleState returns short[] as short* 

    short* sampleState = mixerState->sampleState;
    if(sampleState != NULL){
        int len=sizeof(sampleState)/sizeof(short);
        printf("length of short* sampleState=%d\n", len);//OK

        for(int j=0;j<len;j++) {
            printf("    sampleState[%d]=%u\n",j, *(sampleState+j));                
        }
    }else{
        printf("    sampleState is NULL\n"); 
    }

//same with int[] returned as  int*     

    int* samplePosition = mixerState->samplePosition;
    if(samplePosition != NULL){
        int len=sizeof(samplePosition)/sizeof(int);
        printf("length of int* samplePosition=%d\n", len);//OK

        for(int j=0;j<len;j++) {
            printf("    samplePosition[%d]=%d\n",j, *(samplePosition+j));                
        }
    }else{
        printf("    samplePosition is NULL\n"); 
    }

Ici de l'octet de type de def pour

typedef unsigned char byte;

j'ai donc utilisé %u

    //--------------
    byte* volume    = mixerState->volume;

    if(volume != NULL){
        int len=sizeof(volume)/sizeof(byte);
        printf("length of [byte* volume = mixerState->volume]=%d\n", len);//OK

        for(int j=0;j<len;j++) {
            printf("    volume[%d]=%u\n",j, *(volume+j));                
        }
    }else{
        printf("    volume is NULL\n"); 
    }

Ici est int[][] soundFXStatus.

dois-je utiliser la même méthode ci-dessus et 2 boucles?

    //--------------
    int** soundFXStatus         = mixerState->soundFXStatus;
Vous avez marqués de deux différents langages de programmation. Les bonnes réponses seront différentes selon la langue dans laquelle vous réellement dire. Voulez-vous un C++ ou C réponse?

OriginalL'auteur brian.clear | 2012-04-02