#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);
}
问问题
72 次
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 回答