Initialisation du tableau de pointeur entier en C

J'ai quelques confusions/problèmes relatifs à l'utilisation des pointeurs en C. j'ai mis l'exemple de code ci-dessous pour le comprendre facilement. Veuillez remarquer des différences de ces codes. Si vous avez une certaine compréhension du problème, s'il vous plaît avoir un retour.

Cela ne fonctionne pas.

#include <stdio.h>
#include <stdlib.h>

void process() {
    int *arr;
    arr=(int*)malloc(5*sizeof(int));
    arr=(int*){3,1,4,5,2};
    for(int z=0;z<5;z++) {
        printf("%d ",arr[z]);
    }
    printf("\n");
}

int main() {
    process();
    return 0;
}

Mais cela fonctionne.

#include <stdio.h>
#include <stdlib.h>

void process() {
    int *arr;
    arr=(int*)malloc(5*sizeof(int));
    arr=(int[]){3,1,4,5,2};
    for(int z=0;z<5;z++) {
        printf("%d ",arr[z]);
    }
    printf("\n");
}

int main() {
    process();
    return 0;
}

Cela fonctionne aussi. Pourquoi? Je n'ai pas allouer de la mémoire ici.

#include <stdio.h>
#include <stdlib.h>

void process() {
    int *arr;
    arr=(int[]){3,1,4,5,2};
    for(int z=0;z<5;z++) {
        printf("%d ",arr[z]);
    }
    printf("\n");
}

int main() {
    process();
    return 0;
}

Pourquoi ne sont-ils pas de même?

    arr=(int*){3,1,4,5,2};
    arr=(int[]){3,1,4,5,2};

Est-il un autre moyen pour l'initialisation de tableau de pointeur entier, ne l'utilisez pas cet individu affectation?

arr[0]=3;
arr[1]=1;
arr[2]=4;
arr[3]=5;
arr[4]=2;

Comment puis-je obtenir la taille/numéro de l'allocation de la mémoire du pointeur de façon à ce que je peux utiliser quelque chose comme for(int z=0;z<NUM;z++) { au lieu de for(int z=0;z<5;z++) { statiquement?

Toute réponse est très apprécié.

Merci d'avance.

Êtes-vous à l'aide de gcc? arr=(int[]){3,1,4,5,2}; Je pense n'est pas valide en C++.
Oui, je suis en utilisant le compilateur gcc. Il n'est pas valide en C++? arr=(int[]){3,1,4,5,2};
Oui, ils sont appelés composé de littéraux et gcc accepte en C++ comme une extension (essayez de compiler avec -pedantic et vous devriez obtenir un message d'avertissement).
Vous avez stdlib.h il ET iostream. Aussi l'espace de noms ET le malloc. Quelle langue est-ce ? C+ ?
J'ai enlevé iostream et l'espace de noms. C'est C. Merci.

OriginalL'auteur shibly | 2012-05-16