2012-12-04 78 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(name_first)-1;'此行分配'str'的​​地址,由'strlen ...'等偏移量等於'sizeof(char)'到'p' – nhahtdh

回答

1

實際上,您正在爲以下代碼行中的p分配地址。

p=str+strlen(name_first)-1; 

str是陣列,使得陣列名稱保持的基地址。現在加上name_first數組的長度,並減去1做指針算術,因此你得到的結果。

您已經創建了一個變量count = strlen(name_first)

所以沒必要再打電話strlen的地址分配給p

對於更快的方法,只需要用

p=str+count-1;

+0

謝謝噸人很好說明..... –

+0

@pravinkumar:如果你滿意答案,你可以upvote並接受答案 – Omkant

1

聲明:

p=str+strlen(name_first)-1; 

分配給p內存中的地址由乙方指向。

所以,讓我們說STR起始地址爲0x1000,具有長度爲10,你的name_first有5.然後p指向西班牙語 - 多米尼加共和國的長度。

當你循環運行,要更新在西班牙語 - 多米尼加共和國,0x1003,0x1002,0x1001和0x1000的字符,從而更新str的內容。

希望這會消除你的懷疑。

+0

也有你的問題 –

0

str是str [10]的第一個元素的指針。在這個語句中:「p = str + strlen(name_first)-1;」 RHS是地址

0

P,該指針爲char,被分配在字符數組str中的最後一個字符的地址中的P =線。

然後,您繼續使用該指針來操作的存儲器塊字符,並將其打印出來的操縱內存的內容(因爲str是真的只是一個指向字符數組反正)。

相關問題