字符倒序
输入一个字符串,要求输出倒序,使用指针。# include <stdio.h>
# include <string.h>
main()
{
int a,c;
char str,*p;
scanf("%d",&a);
getchar();
gets(str);
c=strlen(str);
for(p=str+c;c != 0;c--)
{
printf("%c",*p);
}
}
问题发现:发现最后的指针循环输出,根本没有效果,为什么。c不是--了吗?但是输出了一样的值。 本帖最后由 machimilk 于 2015-11-16 22:15 编辑
#include <stdio.h>
#include <string.h>
int main()
{
int c;
char str,*p;
scanf("%s",&str);
c=strlen(str);//比如输入1234567,在内存中是31(str首地址) 32 33 34 35 36 37 00(也就是\0)
for(p=str;c > 0;c--)//指针指向str首地址也就是1234567中的1
{
printf("%c",*(p+c-1));//c是7个字符的长度,那么p+7就指向了结尾的\0,所以要往回修正1个地址
}
printf("\r\n");//换行
system("pause");
}
你的七八行代码我没看懂有什么用?不过你说的“输出了一样的值”,我知道为什么,for循环p=str+c付值后p指针地址没变,c的改变只是结束了循环,并没有对指针p做出改变,所以输出没变。你需要再循环里对p进行改变,没上机,只是说说,希望对你有帮助。 浮云骑士 发表于 2015-11-16 21:57
你的七八行代码我没看懂有什么用?不过你说的“输出了一样的值”,我知道为什么,for循环p=str+c付值后p指 ...
7行代码,输入后回车,8行代码把 回车给获取了,要不然程序会直接结束。还有为什么p的值没有变,不是通过--c来改变p的地址了吗? machimilk 发表于 2015-11-16 22:08
谢谢了,学习了,原来是这样改变,但是为什么我那样写,p的指向不会变呢。 独一无② 发表于 2015-11-16 22:14
谢谢了,学习了,原来是这样改变,但是为什么我那样写,p的指向不会变呢。
你看你的循环条件
for(p=str+c;c != 0;c--)
p直接指向了str+c(c是字符串长度),那么正好指向的\0 独一无② 发表于 2015-11-16 22:14
谢谢了,学习了,原来是这样改变,但是为什么我那样写,p的指向不会变呢。
你看你的循环条件
for(p=str+c;c != 0;c--)
p直接指向了str+c(c是字符串长度),那么正好指向的\0 machimilk 发表于 2015-11-16 22:18
你看你的循环条件
for(p=str+c;c != 0;c--)
还有我发现我的这个循环,根本不能循环,输出都是一样的值
页:
[1]