我想知道如何将指针p分配给str的地址

时间:2012-12-04 06:58:48

标签: c pointers

#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 个答案:

答案 0 :(得分:1)

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

p=str+strlen(name_first)-1;

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

您已创建变量count = strlen(name_first)

因此无需再次致电strlen将地址分配给p

为了更快的方式,请使用

p=str+count-1;

答案 1 :(得分:1)

声明:

p=str+strlen(name_first)-1;

指定p指向的内存中的地址。

所以,让我们说str从地址0x1000开始,长度为10,你的name_first长度为5.然后p指向0x1004。

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

希望这可以解除你的怀疑。

答案 2 :(得分:0)

str是str [10]的第一个元素的指针。在这个陈述中:&#34; p = str + strlen(name_first)-1;&#34; rhs是一个地址

答案 3 :(得分:0)

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

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