okhaohao116 发表于 2016-4-18 18:15:40

一道指针数组问题 求解答 (字符串排序)

#include<stdio.h>
#include<string.h>
int main()
{
        int n,i;
        char a,*p;
        void s(char*p[],int n);
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
                scanf("%s",a);
        p=a;
        }
        s(p,n);
        for(i=0;i<n;i++)
                printf("%s\n",p);
        return 0;
}
void s(char *p1[],int n)
{
        int j,k;
        char *t;
        for(j=0;j<n-1;j++)
                for(k=j+1;k<n;k++)
                        if(strcmp(p1,p1)>0)
                        {
                                t=p1;
                                p1=p1;
                                p1=t;
                        }
}
上面是正确做法
下面是错误做法

#include<stdio.h>
#include<string.h>
int main()
{
        int n,i;
        char a,*p;
        void s(char*p[],int n);
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
                scanf("%s",a);
        p=a;
        }
        s(p,n);
        for(i=0;i<n;i++)
                printf("%s\n",*p);
        return 0;
}
void s(char *p1[],int n)
{
        int j,k;
        char t;
        for(j=0;j<n-1;j++)
                for(k=j+1;k<n;k++)
                        if(strcmp(p1,p1)>0)
                        {
                                t=*p1;
                                *p1=*p1;
                                *p1=t;
                        }
}

为什么输出我改成输出*p【i】就不行了?而p不是代表地址吗?
题目如下字符串排序
Sample Input
5
red
blue
yellow
green
purple

Sample Output
blue
green
purple
red
yellow

mingcxx 发表于 2016-4-19 00:19:25

本帖最后由 mingcxx 于 2016-4-19 00:23 编辑

p:是第i个字符串的地址,也是指向第i个字符串首字符的指针(地址)
*p: 取值运算符取出第i个字符串的首字符。
printf("%s", p); 表示从p指向的字符开始依次向后打印每个字符,直到遇到空字符为止。所以,打印字符串实际上是在传递字符串的地址(或者更准确说是字符串首元素的地址),函数本身自动打印该字符到第一个空字符之间的所有字符,也就是打印了所谓的字符串。
printf("%s", *p);语法错误,打印字符串需要传递字符串地址p,而不是字符串首字符*p。编译器不检查printf()的参数错误,调试运行一定有内存访问报错。
再说字符串排序:对指向字符串的指针排序。
排序代码部分:
t=*p1;
*p1=*p1;
*p1=t;
错,多了*号之后,原本交换指针值变成了交换对应字符串的首元素。假定没有其他编程错误,
调试运行:发现每个字符串的首元素都变成了其他字符串的首元素按序排列。
建议巩固基础。

dps521 发表于 2016-4-19 03:05:55

过来看看

dps521 发表于 2016-4-19 03:09:48

过来看看
页: [1]
查看完整版本: 一道指针数组问题 求解答 (字符串排序)