鱼C论坛

 找回密码
 立即注册
查看: 2347|回复: 7

字符倒序

[复制链接]
发表于 2015-11-16 21:30:01 | 显示全部楼层 |阅读模式
10鱼币
输入一个字符串,要求输出倒序,使用指针。
  1. # include <stdio.h>
  2. # include <string.h>
  3. main()
  4. {
  5.         int a,c;
  6.         char str[100],*p;
  7.         scanf("%d",&a);
  8.         getchar();

  9.                 gets(str);
  10.                 c=strlen(str);
  11.                 for(p=str+c;c != 0;c--)
  12.                 {
  13.                         printf("%c",*p);
  14.                 }

  15. }
复制代码


问题发现:发现最后的指针循环输出,根本没有效果,为什么。c不是--了吗?但是输出了一样的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-16 21:30:02 | 显示全部楼层
本帖最后由 machimilk 于 2015-11-16 22:15 编辑

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.         int c;
  6.         char str[100],*p;
  7.         scanf("%s",&str);
  8.         c=strlen(str);//比如输入1234567,在内存中是31(str首地址) 32 33 34 35 36 37 00(也就是\0)
  9.         for(p=str;c > 0;c--)//指针指向str首地址也就是1234567中的1
  10.         {
  11.                 printf("%c",*(p+c-1));//c是7个字符的长度,那么p+7就指向了结尾的\0,所以要往回修正1个地址
  12.         }
  13.         printf("\r\n");//换行
  14.         system("pause");

  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-16 21:57:40 | 显示全部楼层
你的七八行代码我没看懂有什么用?不过你说的“输出了一样的值”,我知道为什么,for循环p=str+c付值后p指针地址没变,c的改变只是结束了循环,并没有对指针p做出改变,所以输出没变。你需要再循环里对p进行改变,没上机,只是说说,希望对你有帮助。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-16 22:05:27 | 显示全部楼层
浮云骑士 发表于 2015-11-16 21:57
你的七八行代码我没看懂有什么用?不过你说的“输出了一样的值”,我知道为什么,for循环p=str+c付值后p指 ...

7行代码,输入后回车,8行代码把 回车给获取了,要不然程序会直接结束。还有为什么p的值没有变,不是通过--c来改变p的地址了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-16 22:14:08 | 显示全部楼层

谢谢了,学习了,原来是这样改变,但是为什么我那样写,p的指向不会变呢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-16 22:18:03 | 显示全部楼层
独一无② 发表于 2015-11-16 22:14
谢谢了,学习了,原来是这样改变,但是为什么我那样写,p的指向不会变呢。

你看你的循环条件
for(p=str+c;c != 0;c--)

p直接指向了str+c(c是字符串长度),那么正好指向的\0
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-16 22:18:39 | 显示全部楼层
独一无② 发表于 2015-11-16 22:14
谢谢了,学习了,原来是这样改变,但是为什么我那样写,p的指向不会变呢。

你看你的循环条件
for(p=str+c;c != 0;c--)

p直接指向了str+c(c是字符串长度),那么正好指向的\0
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-16 22:19:42 | 显示全部楼层
machimilk 发表于 2015-11-16 22:18
你看你的循环条件
for(p=str+c;c != 0;c--)

还有我发现我的这个循环,根本不能循环,输出都是一样的值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 12:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表