#include <stdio.h> int main() { char*m ; m="srm"; printf("%d",*m); return 0; } The output is 115. Can someone explain why it gives 115 as output?
3 Réponses :
En utilisant le spécificateur de format Si vous souhaitez imprimer la chaîne, utilisez le * m code> est identique que
m [0] code>, c'est-à-dire le premier élément du tableau pointé par
M code> qui est le caractère
's' code>.
% d code>, vous imprimez l'argument donné en tant qu'intéger. La valeur ASCII de
's' code> est de 115, c'est pourquoi vous obtenez cette valeur. P>
% s code > Spécificateur de format (qui attend un
char * code> argument) et transmettez le pointeur
m code>. p>
Et si je veux imprimer la chaîne. Est-ce que% s fera faire?
@Vasuseh % s code> avec
m code> comme argument, pas
* m code>
Vous avez quelques problèmes ici, Le premier est que vous essayez d'ajouter trois octets à un caractère, un caractère est un octet. Le deuxième problème est que CHAR * M est un pointeur à une adresse et n'est pas une lvalue modifiable. La seule fois que vous devez utiliser les pointeurs est lorsque vous essayez de pointer sur Data
Exemple: P>
char byte = "A"; //WRONG char byte = 0x61; //OK char byte = 'A'; //OK //notice that when setting char byte = "A" you will recieve an error, //the double quotations is for character arrays where as single quotes, // are used to identify a char enter code here char str[] = "ABCDEF"; char *m = str; printf("%02x", *m); //you are pointing to str[0] printf("%02x", *m[1]); //you are pointing to str[1] printf("%02x", *m[1]); //you are pointing to str[1] printf("%02x", *(m + 1)); //you are still pointing to str[1] //m is a pointer to the address in memory calling it like // *m[1] or *(m + 1) is saying address + one byte //these examples are the same as calling (more or less) printf("%02x", str[0]); or printf("%02x", str[1]);
J'ai oublié de mentionner lors de l'utilisation de Printf, si vous souhaitez imprimer un tableau de caractères, utilisez% s comme mentionné par d'autres utilisateurs, si vous utilisez% PrintF% S, le tableau de caractères doit être résilié null
En pointant vers un pointeur, vous êtes réellement déshergéfrenant, alors * m [1] retournerait la valeur de STR [1], m [1] va retourner, je crois que la partie de l'adresse ou des ordures que je ne suis pas sûre que
Non, m code> contient un pointeur sur le premier élément de
str code>. La syntaxe
m [1] code> est exactement équivalente à
* (m + 1) code> selon la section 6.5.2.1P2 du C standard .
S'il est exactement équivalent à * (M + 1), pourquoi considérez-vous cela invalide au lieu de sténographie, 6.5.2.1P2 indique que ce n'est rien de plus qu'une désignation indiquée, ce qui signifie qu'il est littéralement sténographique?
Dans l'exemple, je mets à la fois et même indiqué qu'ils sont les mêmes ...
* (m + 1) code> va bien.
* m [1] code> est pas b>. Il se traduit par
** (m + 1) code>.
m code> est un
char * code>, donc
m + 1 code> est également un
char * code>, faisant
* ( m + 1) code> ==
m [1] code> a
char code>, qui fait
** (m + 1) code> == < Code> * m [1] code> invalide parce que vous ne pouvez pas la désarférence, un
char code> comme s'il s'agissait d'un pointeur.
Le code que vous avez posté échoue pour compiler exactement cette raison.
par golly tu as raison. Je vais devoir lire ce document que vous avez posté et essayer d'obtenir un meilleur sous debout, je suppose. Je pensais que je l'avais à peu près emballé: /
Les pointeurs et les tableaux agissent de la même manière que les noms .Array sont également des pointeurs pointant vers le premier élément de la matrice. Vous avez stocké "SRM" comme une matrice de caractères avec M pointant vers le premier élément. "% D" vous donnera la valeur ASCII de l'article pointant par le pointeur. La valeur ASCII de "S" est 115. Si vous incrémentez votre pointeur (M ++), imprimez la valeur ASCII, la sortie sera une valeur ASCII de «R» - 114.
#include <stdio.h> int main() { char *m ; m="srm"; m++; //pointing to the 2nd element of the array printf("%d",*m); //output = 114 return 0; }
Les tableaux ne sont pas des pointeurs. Les pointeurs ne sont pas des tableaux. Reste de réponse ok.
Parce que c'est la valeur ASCII de la lettre 's'
Quel résultat vous attendiez-vous?