标题:c语言指针练习题答案看不懂几个地方,求大佬指点一下
只看楼主
aerobe
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-11-10
结帖率:100%
已结贴  问题点数:10 回复次数:4 
c语言指针练习题答案看不懂几个地方,求大佬指点一下
题目是将一个不确定位数的正整数进行三位分节后输出
char *separate(long int);
char *exchange(long int);
int main()
{
    long int num;
    char *p;

    printf("please input a number\n");
    scanf("%ld",&num);
    p=separate(num);
    printf("结果是%s\n\n",p);
    system("PAUSE");
    return 0;
}

char *separate(long int num)
{

    char *p1,*p2=exchange(num),*p3,*pt;
    int count=1;

    p1=p2;
    while(*(p2++)!='\0');
    p3=p2-1;//第一个点就是这里
    p2=p2-2;

    while(p2>p1)
    {
        if(count==3)
        {
          pt=p3++;
          while(pt>=p2)
          {

              *(pt+1)=*pt;
              pt--;
          }
          *p2=',';
          count=1;
          p2--;
        }
        count++;
        p2--;
    }
    return p1;
}
char *exchange(long int num)
{
    char *p,*p1,*p2,temp;

    p=p1=p2=(char*)malloc(30*sizeof(char));
    while(num)
    {
        *p2=num%10+'0';
        p2++;
        num/=10;
    }
    *p2='\0';
    p2--;

    while(p2>p1)//第2个点是这里
    {
        temp=*p2;
        *p2=*p1;
        *p1=temp;
        p2--;
        p1++;
    }
    return p;
}
这里不明白,因为p1和p2都是指针,视频上说只有两个指针指向一个数组的时候才有大小比较意义,还有前面P3=p2-1,说是指向字符串结束标记,为什么?

[此贴子已经被作者于2020-11-10 21:56编辑过]

搜索更多相关主题的帖子: long num while int char 
2020-11-10 21:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
程序代码:
#include <stdio.h>

void foo( unsigned n )
{
    unsigned b=1, c=1;
    for( unsigned t=n/10; t!=0; t/=10, b*=10, ++c );

    for( unsigned t=n; c!=0; t%=b, b/=10, --c )
    {
        putchar( t/b + '0' );

        if( c!=1 && c%3==1 )
            putchar( ',' );
    }
    putchar( '\n' );
}

int main( void )
{
    foo( 0 );
    foo( 1 );
    foo( 12 );
    foo( 123 );
    foo( 1234 );
    foo( 12345 );
    foo( 123456 );
    foo( 1234567 );
    foo( 12345678 );
    foo( 123456789 );
    foo( 1234567890 );
}


输出
程序代码:
0
1
12
123
1,234
12,345
123,456
1,234,567
12,345,678
123,456,789
1,234,567,890
2020-11-11 09:38
aerobe
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-11-10
得分:0 
回复 2楼 rjsp
非常感谢大佬的程序,但是我就是有一个疑问就是两个指针没有指向数组,却可以比较大小是为什么?
2020-11-11 12:51
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:3 
回复 3楼 aerobe
p=p1=p2=(char*)malloc(30*sizeof(char));

你p1、p2都指向了malloc分配的同一块内存空间,这块内存空间是连续的,所以p1、p2的比较是可以的,和数组的性质是一样的。char a[30];也是分配连续的长度为30*char长度的空间。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-11-11 13:12
aerobe
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-11-10
得分:0 
回复 4楼 纯蓝之刃
明白了,感谢感谢
2020-11-11 22:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503853-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.175933 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved