#include<stdio.h>
#include<string.h>
int main()
{
char arr[3][10];
char *ptr[3];
strcpy(arr[1],"abcde");
ptr[1]=arr[1];
printf("%s\n",arr[1]);
printf("%p\n", &arr[1]);
printf("%p\n", ptr[1]);
printf("%p\n", &ptr[1]);
printf("%s\n",ptr[1]);
printf("%s\n", *(ptr+1));
return 0;
}
Résultatdans le tableau de la valeur d'impression pointeur sans *
abcde
0x7ffdcbbd8daa
0x7ffdcbbd8daa
0x7ffc30ed1188
abcde
abcde
Je sais ptr
est un tableau de pointeur. Le déréférencement d'un pointeur nécessite un opérateur unaire avant celui-ci. Pourquoi peut-on déréférencer le pointeur ptr[1]
sans le *
? Merci
Pouvez-vous préciser votre problème et votre question? Voulez-vous dire la ligne (mal typée) 'printf ("% s \ n ") ptr [1]);'? (Dans le futur, *** copier-coller *** code au lieu de le réécrire dans la question.) –
Notez également que 'arr [1]' et '& arr [1]' pourraient pointer vers le même emplacement, mais sématiquement ils sont différents. 'arr [1]' est égal à '& arr [1] [0]' qui est de type 'char *'. '& arr [1]' est de type 'char (*) [10]'. –
Vous n'êtes pas déréférencé, printf() prend un pointeur sur une chaîne pour "% s". Vous donnez un pointeur dans ptr [1]. – MayurK