独一无② 发表于 2015-11-16 21:30:01

字符倒序

输入一个字符串,要求输出倒序,使用指针。
# 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 21:30:02

本帖最后由 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");

}

浮云骑士 发表于 2015-11-16 21:57:40

你的七八行代码我没看懂有什么用?不过你说的“输出了一样的值”,我知道为什么,for循环p=str+c付值后p指针地址没变,c的改变只是结束了循环,并没有对指针p做出改变,所以输出没变。你需要再循环里对p进行改变,没上机,只是说说,希望对你有帮助。

独一无② 发表于 2015-11-16 22:05:27

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

7行代码,输入后回车,8行代码把 回车给获取了,要不然程序会直接结束。还有为什么p的值没有变,不是通过--c来改变p的地址了吗?

独一无② 发表于 2015-11-16 22:14:08

machimilk 发表于 2015-11-16 22:08


谢谢了,学习了,原来是这样改变,但是为什么我那样写,p的指向不会变呢。

machimilk 发表于 2015-11-16 22:18:03

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

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

p直接指向了str+c(c是字符串长度),那么正好指向的\0

machimilk 发表于 2015-11-16 22:18:39

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

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

p直接指向了str+c(c是字符串长度),那么正好指向的\0

独一无② 发表于 2015-11-16 22:19:42

machimilk 发表于 2015-11-16 22:18
你看你的循环条件
for(p=str+c;c != 0;c--)



还有我发现我的这个循环,根本不能循环,输出都是一样的值
页: [1]
查看完整版本: 字符倒序