Bonjour,

Je pensais avoir compris les pointeurs, apparemment ce n'est pas le cas, pour moi, on a:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(int argc, char ** argv){
        int     *i = malloc(sizeof(int));
        *i = 5;         // *i represente la valeur pointee par i ?
 
        printf("1 - Valeur stockée a l'adresse %d : %d\n", i, *i);      // i represente la valeur de i ?
 
        free(i);
 
        char    *ch1 = malloc(4 * sizeof(char));
        *ch1 = "Hey";   //*ch1 represente la valeur pointee par ch1 ?
        printf("2 - Valeur stockée a l'adresse %d : %s\n", ch1, *ch1); // ch1 represente la valeur de ch1 ?
 
        free(ch1);
 
        return 0;
}
Les questions sont les mêmes, mais les réponses semblent différentes et je vois pas pourquoi..

Pourquoi n'ai-je un warning que pour ch1 et non pour i ainsi qu'une erreur de segmentation ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
gcc test_chaines.c -o test_chaines
test_chaines.c: In function ‘main’:
test_chaines.c:14: warning: assignment makes integer from pointer without a cast

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
1 - Valeur stockée a l'adresse 10080272 : 5
Erreur de segmentation
Ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
1 - Valeur stockée a l'adresse 32247824 : 5
2 - Valeur stockée a l'adresse 32247824 : I
Si je remplace
Code : Sélectionner tout - Visualiser dans une fenêtre à part
printf("2 - Valeur stockée a l'adresse %d : %s\n", ch1, *ch1);
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
printf("2 - Valeur stockée a l'adresse %d : %s\n", ch1, ch1);