0
votes

C Pointeurs de programmation et tableau

#include<stdio.h>

int main()
{
  //int *a={5641,5,98};
  char *s="this is a character array";
  printf("%s",s);
}
This method of  INITIALIZING array works for character array but fails for interger array please tell me why..? 

3 commentaires

Que diriez-vous de int A [] = {...}; ?


Essayez ceci int A [] = {5641, 5, 98};


Lire Ce


3 Réponses :


0
votes
    #include<stdio.h> 

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

  printf("%p\n", ptr); 
  return 0; 
}

1 commentaires

Besoin d'une explication



5
votes

pour commencer dans votre programme s code> n'est pas un tableau. C'est un pointeur.

#include <stdio.h>

int main(void) 
{
    enum { N = 5 };
    int *p = ( int[N] ) { 1, 2, 3, 4, 5 };

    for ( size_t i = 0; i < N; i++ ) printf( "%d ", p[i] );
    putchar( '\n' );

    return 0;
}


13 commentaires

Vous n'avez pas besoin d'appeler gratuit () avant de sortir de la portée?


@ Robur_131 Non, vous n'avez pas besoin de ne pas être attribué de manière dynamique.


Ou est-ce parce qu'il n'y a pas de malloc () associé () ?


Donc, * p est essentiellement une variable locale pour Main () , sera-t-il détruit une fois principal () sort de la portée?


@ Robur_131 Le littéral composé a la durée de stockage automatique car elle est définie dans le corps d'une fonction.


@SuvenPandey n est nécessaire pour garder la taille de la matrice. Sinon, vous ne pouvez pas ne pas calculer sa taille. En C const int n = 5; est évalué au moment de l'exécution.


Comment détermineriez-vous la longueur de int * a = (int []) {5641, 5, 98}; ?


@ Robur_131 Comme je l'ai déjà écrit, vous êtes incapable de le faire. Définissez une variable qui conservera la taille de la matrice ou utilisera une valeur sentinelle dans la matrice.


@SuvenPandey Oui, le code sera compilé, mais comment connaîtrez-vous la taille de la matrice?


Eh bien, le compilateur peut comprendre la taille de int A [] = {1,2,3} et char s [] = "bonjour" donc je ne vois aucune raison Pourquoi la taille serait un problème tant que la taille est constante.


@Suvenpandey Un littéral composé crée un objet Sans nom. Donc, vous ne pouvez pas calculer sa taille.


Oui c'est un pointeur. Mais pourquoi une chaîne entière est imprimée lorsque nous le faisons. C'est un pointeur pointant vers l'adresse qui peut stocker une valeur d'un seul caractère. Sa taille est de 4 octets, il imprime toujours une telle grande chaîne.


@Kshyamano Strings sont des séquences de caractères terminées par un caractère zéro. Donc, les fonctions de sortie savent combien de caractères ils doivent produire.



0
votes

Si vous souhaitez initialiser statiquement une matrice, utilisez le formulaire int A [] = {...} code> comme mentionné dans le commentaire. Voici la voie à suivre:

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

int main()
{

    //int a[] = { 5641, 5, 98};
    int arrayLength = 3;
    int *a = (int*) malloc( (arrayLength + 1) * sizeof(a));
    a[0] = 5641;
    a[1] = 5;
    a[2] = 98;

    char const *s = "this is a character array";
    printf("%s\n",s);

    int i = 0;
    printf("Array length is %d\n", arrayLength);
    for(; i < arrayLength ; ++i){
        printf("%d ", a[i]);
    }
    printf("\n");
    free(a);
}


0 commentaires