Changement de tableau à l'intérieur de la fonction en C

Je suis en train d'apprendre le C et confus pourquoi un tableau créé dans les principaux habitude de changement à l'intérieur de la fonction, je suis en supposant que le tableau passé est un pointeur, et la modification du pointeur devraient ai changer le tableau , à droite ? quelqu'un peut m'expliquer ce qui se passe dans ce cas?

thx pour l'aider.

int main(){
    int i, length = 10;
    int array[length];

    for (i = 0 ; i < length ; i++)
        array[i] = i * 10;
    printf("Before:");
    print(array, length);
    change(array, length);
    printf("After:");
    print(array, length);

    return 0;
}

//Print on console the array of int
void print(int *array,int length)
{
    int i;
    for(i = 0 ; i < length ; i++)
        printf("%d ", array[i]);
    printf("\n");
}

//Change the pointer of the array
void change(int *array,int length)
{
    int *new = (int *) malloc(length * sizeof(int));
    int i;
    for(i = 0 ; i < length ; i++)
        new[i] = 1;
    array = new;
}

J'attend de voir la sortie suivante:

Before:0 10 20 30 40 50 60 70 80 90 
After:1 1 1 1 1 1 1 1 1 1 

Ce que je reçois:

Before:0 10 20 30 40 50 60 70 80 90 
After:0 10 20 30 40 50 60 70 80 90 
  • ses juste pour le test
  • Jamais, pas même pour le test.
  • u peut donner des conseils alors? thx
  • Tableau est une variable locale à l'intérieur des deux main et change. Son adresse est passé de main à change. Après cela, change pouvez la redistribuer et elle n'aura aucun effet sur le tableau dans main. Les deux variables sont indépendantes. Maintenant, change peut changer le contenu de array, auquel cas main verrez le changement.
  • Viens voir ma réponse, et vous comprendrez ce que je veux dire. Pour les compilateurs for(int i=0;i<length;i++) est parfaitement lisible mais pour les humains ... C'est mieux que for (int i = 0 ; i < length ; i++). Aussi, l'écriture de plusieurs instructions sur la même ligne rend encore plus difficile à lire.
  • Ne pas utiliser malloc pour une telle tâche. Essayez ceci.
  • Est une bonne habitude d'utiliser "const" chaque fois que vous voulez une fonction à ne pas modifier quelque chose. Donc, juste pour s'assurer que vous êtes réellement l'impression et de ne pas essayer de modifier le tableau à l'intérieur de la fonction d'impression que vous devriez changer votre fonction d'impression pour annuler l'impression(const int *tableau, int longueur){..}.
  • Je suis confus pourquoi void f(int i) {i = 5;} int main() {int x = 0; f(x); printf("%d\n", x); return 0;} ne pas imprimer sur 5? N'ai-je pas changer de x à l'intérieur de la fonction?