鱼C论坛

 找回密码
 立即注册
查看: 130|回复: 4

c语言指针

[复制链接]
发表于 2024-7-29 12:12:59 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int main()
{
    char c[99],ch[99],*p=c,*q=ch;
    gets(c);
    while(*p)
        p++;
    while(*p)
    {
        *q=*p;
        p--;
        q++;
    }
    puts(c);
    puts(ch);
}
逆序存放数组,输出没有结果怎么回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-29 12:18:58 | 显示全部楼层
while(*p)
        p++;   这里p都走到尾部了,  下面的while(*p)  还能进去吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-29 12:45:21 From FishC Mobile | 显示全部楼层
wp231957 发表于 2024-7-29 12:18
while(*p)
        p++;   这里p都走到尾部了,  下面的while(*p)  还能进去吗

你好,我修改了之后
int main()
{
    char c[99],ch[99],*p=c,*q=ch;
    gets(c);
    while(*p)
        p++;
    p=p-1;
    while(*p)
    {
        *q=*p;
        q++;
        p--;
    }
    *q='\0';
    puts(ch);
}
逆序存放后还输出了一个@字符这是什么情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-29 13:16:32 | 显示全部楼层
本帖最后由 三体人的智子 于 2024-7-29 13:17 编辑
1203081549 发表于 2024-7-29 12:45
你好,我修改了之后
int main()
{


我在测试你程序时也出现了乱码
微信图片_20240729131409.png

这里建议修改:将 puts改为printf   //printf是标准的输出函数

最终代码如下(建议楼主提交代码用代码格式)
#include<stdio.h>
int main()
{
    char c[99],ch[99],*p=c,*q=ch;
    gets(c);
    while(*p)
        p++;
    p=p-1;
    while(*p)
    {
        *q=*p;
        q++;
        p--;
    }
    *q='\0';
    printf(ch);
}
微信图片_20240729131700.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-1 12:56:32 | 显示全部楼层
在第一个 while 循环中,while(*p) 的目的是找到字符串的结束符 \0。但是当循环结束时,p 指向了字符串的结束符位置,即 c 数组的最后一个元素之后。

第二个 while 循环的条件 while(*p) 初始化时就错了,因为此时 p 已经指向了字符串的结束符\0,所以这个循环根本不会执行,导致没有进行任何字符的复制操作。

修正建议: 要实现字符串逆序,可以在找到字符串结束符后,不改变 p 的位置,直接开始逆序复制字符到 ch 中,并在复制时跳过结束符\0。修正后的代码示例如下:
#include <stdio.h>
#include <string.h>

int main() {
    char c[99], ch[99], *p = c, *q = ch;
    
    gets(c);
    
    // 找到字符串结束符
    while (*p) p++;
    p--; // 将 p 回退到最后一个字符的位置,因为在结束符前停止了
    
    // 逆序复制,不包括结束符
    while (p >= c) {
        *q = *p;
        p--;
        q++;
    }
    *q = '\0'; // 在复制结束后给新字符串添加结束符
    
    puts(c);       // 输出原字符串
    puts(ch);      // 输出逆序后的字符串
    
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 11:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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