#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 :(得分: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数组的指针)。