| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 545 人关注过本帖
标题:凌晨四点发现问题,希望得到解答
只看楼主 加入收藏
max668
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-7-25
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:4 
凌晨四点发现问题,希望得到解答
在主函数中输入10个等长的字符串。用另一个函数对它们排序。然后在主函数输出这个已排好序的字符串

// 11.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<string.h>

void sort(char (*s)[6])
{
    int i,j;
    char temp[6],*t=temp;
    for(i=0;i<9;i++)
    {
        for(j=0;j<9-i;j++)
        {
            if(strcmp(s[j],s[j+1])>0)
            {
                strcpy(t,s[j]);
                strcpy(s[j],s[j+1]);
                strcpy(s[j+1],t);
            }
        }
    }   
}

int main(int argc, char* argv[])
{
    int i;
    char str[10][6];
    char (*p)[6];
    printf("input 10 string:\n");
    for(i=0;i<10;i++)
    {
        scanf("%s",str[i]);//明明是二维数组,怎么能是一维数组呢?
    }
    p=str;//P代表的是二维数组的地址
    sort(p);//形参是一维数组指针,实参怎么能是二维数组指针呢?
    printf("Now,the sequence is:\n");
    for(i=0;i<10;i++)
    {
        printf("%s\n",str[i]);//还有这里也是
    }
    return 0;
}

以上的问题,相信很多初学者都想知道,都感到困惑,不清楚,希望大家能好好给说一说!谢谢啦!
搜索更多相关主题的帖子: 解答 
2010-08-18 04:12
rib
Rank: 4
等 级:业余侠客
帖 子:95
专家分:252
注 册:2009-3-30
收藏
得分:0 
for(i=0;i<10;i++)
    {
        scanf("%s",str[i]);//明明是二维数组,怎么能是一维数组呢?//这里是字符串,所以取数组的首地址
    }


sort(p);//形参是一维数组指针,实参怎么能是二维数组指针呢?
//把void sort(char (*s)[6])这句改为void sort(char s[10][6])
可能你就理解了为什么要sort(p);
2010-08-18 08:26
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
收藏
得分:5 
#include "stdafx.h"
#include<stdio.h>
#include<string.h>

void sort(char (*s)[6])
{
    int i,j;
    char temp[6],*t=temp;
    for(i=0;i<9;i++)
    {
        for(j=0;j<9-i;j++)
        {
            if(strcmp(s[j],s[j+1])>0)   //其实我倒是觉得这里是需要思考一下的,s[j]表示的其实是一个地址,
                                          之所以s[j]和s[j+1]表示的是两个字符串是因为char (*s)[6]这个定义
                                          导致他+1的结果是跳跃一个sizeof(char)*6的长度。

            {
                strcpy(t,s[j]);
                strcpy(s[j],s[j+1]);
                strcpy(s[j+1],t);
            }
        }
    }   
}

int main(int argc, char* argv[])
{
    int i;
    char str[10][6];
    char (*p)[6];
    printf("input 10 string:\n");
    for(i=0;i<10;i++)
    {
        scanf("%s",str[i]);//明明是二维数组,怎么能是一维数组呢?
                             这个表示的是地址,输入到str[i][0]到str[i][5]
    }
    p=str;//P代表的是二维数组的地址
    sort(p);//形参是一维数组指针,实参怎么能是二维数组指针呢?
             这个不影响的。。地址就是地址,str和str[0]和&str[0][0]都一样的,主要看我打蓝色的部分。
    printf("Now,the sequence is:\n");
    for(i=0;i<10;i++)
    {
        printf("%s\n",str[i]);//还有这里也是
    }
    return 0;
}
2010-08-18 08:38
b1049453056
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-24
收藏
得分:0 
楼主的代码是COPY过来的啊?刚看到那么复杂的东东我可是吓了一跳呢,可是再看楼主的问题,呵呵,貌似跟我水平差不多呢。建议楼主还是先从简单的例子开始分析学习。。。
2010-08-18 09:05
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
收藏
得分:0 
回复 楼主 max668
楼主其实是对(*p)[]的不理解,这是指向2维数组的指针,多看看书吧
2010-08-18 09:33
快速回复:凌晨四点发现问题,希望得到解答
数据加载中...
 
   



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

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