-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);
}
4

4 回答 4

1

该声明:

p=str+strlen(name_first)-1;

将 str 指向的内存中的地址分配给 p。

因此,假设 str 从地址 0x1000 开始,长度为 10,您的 name_first 长度为 5。然后 p 指向 0x1004。

循环运行时,会更新 0x1004、0x1003、0x1002、0x1001 和 0x1000 中的字符,从而更新 str 的内容。

希望这可以消除您的疑问。

于 2012-12-04T07:05:18.683 回答
1

实际上,您正在p以下代码行中分配地址。

p=str+strlen(name_first)-1;

str是一个数组,因此数组名称保留基地址。现在添加数组的长度name_first并减去1指针算术,因此您得到了结果。

您已经创建了一个变量count = strlen(name_first)

因此无需strlen再次调用将地址分配给p.

为了更快的方式,只需使用

p=str+count-1;

于 2012-12-04T07:02:16.177 回答
0

str 是 str[10] 的第一个元素的指针。在此语句中:“p=str+strlen(name_first)-1;” rhs 是一个地址

于 2012-12-04T07:06:01.897 回答
0

p,指向 char 的指针,被分配了 p= 行中 char 数组 str 中最后一个 char 的地址。

然后,您继续使用该指针来操作该内存块中的字符,然后它们打印出操作内存内容(因为 str 实际上只是指向 char 数组的指针)。

于 2012-12-04T07:06:04.983 回答