2012-12-04 3 views
-2
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char *p; 
    char str[10],name_first[10]; 
    int i,count; 

    printf("\nName before reversing the string:::::::::::::"); 
    scanf("%s",&name_first); 

    // I have taken a name in name_variable and now i want to reverse it 
    // using pointer for ex 
    count = strlen(name_first); 

    p=str+strlen(name_first)-1; 

    for(i=0;i<count;i++) 
    { 
     *(p-i)=*(name_first+i); 
    } 

    // now I am getting a reverse of string as a o/p but I want to know 
    // how p is pointing to the str as I'm not assigning any address, 
    // is it done automatically by the compiler? 
    printf("\nname after reversing the string::::::::::::::%s\n",str); 
} 
+0

'p = str + strlen (nom_first) -1;' cette ligne affecte l'adresse de 'str', compensée par' strlen ... 'etc. quantité de' sizeof (char) 'à' p' – nhahtdh

Répondre

1

En fait, vous attribuez l'adresse à p dans la ligne de code suivante.

p=str+strlen(name_first)-1; 

str est un tableau si nom du tableau conserve l'adresse de base. Maintenant, en ajoutant la longueur du tableau name_first et en soustrayant 1 le pointeur arithmétique d'où vous obtenez le résultat.

Vous avez créé une variable count = strlen(name_first).

Il n'est donc pas nécessaire d'appeler à nouveau strlen pour affecter l'adresse à p.

Pour moyen plus rapide, utilisez

p=str+count-1;

+0

merci ton homme bien illustré ..... –

+0

@pravinkumar: Si vous êtes satisfait de la réponse, vous pouvez upvote et accepter la réponse – Omkant

1

La déclaration:

p=str+strlen(name_first)-1; 

attribue à p une adresse dans la mémoire pointée par str. Donc, disons que str commence à l'adresse 0x1000 et a une longueur de 10 et votre name_first a une longueur de 5. Puis p pointe sur 0x1004. Lorsque vous exécutez la boucle, vous mettez à jour les caractères 0x1004, 0x1003, 0x1002, 0x1001 et 0x1000, mettant ainsi à jour le contenu de str.

Espérons que cela clarifie votre doute. Str est le pointeur du premier élément de str [10]

+0

got ur point too –

0

Dans cette déclaration: "p = str + strlen (name_first) -1;" rhs est une adresse

0

p, le pointeur vers un caractère, se voit attribuer l'adresse du dernier caractère dans la chaîne de caractères str dans votre p = ligne. Vous allez ensuite utiliser ce pointeur pour manipuler des caractères dans ce bloc de mémoire et les imprimer en manipulant le contenu de la mémoire (parce que str est en fait juste un pointeur vers le tableau char).

Questions connexes