| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1050 人关注过本帖
标题:指针的问题—请各位大哥帮帮忙
只看楼主 加入收藏
fedora13
Rank: 1
来 自:广东
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-8-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
指针的问题—请各位大哥帮帮忙
利用二级指针对n个字符串排序并输出:
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
int main(int argc, char* argv[])
{    char **p,*y,*x;
    char a[4][30]={"abcdfe","bcdfeg","casdfdsf","dfdsafads"};
    int i,j;
    for(i=0;i<4;i++)
    {    x=a[i];
        *(p+i)=x; }
    for(i=0;i<3;i++)
        for(j=i+1;j<4;j++)
        {    if(strcmp(*(p+i),*(p+j))>0)
            { y=*(p+i);
              *(p+i)=*(p+j);
              *(p+j)=y;
            }
        }
        for(i=0;i<4;i++)
            printf("%s\n",*(p+i));
    return 0;
}
上面的错在那里?在编译的时候通过,但运行的时候报错
本人刚刚学完指针—对二级指针还不是很了解。
搜索更多相关主题的帖子: 指针 
2010-08-30 07:31
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
收藏
得分:10 
原因很简单, **p 没有初始化, 有两种解决方法:
1 修改定义 char *p[4]
2 初始化分配内存 p = new char *[4]; 释放内存 delete p;
2010-08-30 08:27
fedora13
Rank: 1
来 自:广东
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-8-15
收藏
得分:0 
回复 楼主 fedora13


[ 本帖最后由 fedora13 于 2010-8-30 10:12 编辑 ]

学习是要孤独,哪怕最后没有女朋友
2010-08-30 10:10
fedora13
Rank: 1
来 自:广东
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-8-15
收藏
得分:0 
回复 2楼 makebest
第二种方法不是很懂?希望可以讲解

学习是要孤独,哪怕最后没有女朋友
2010-08-30 10:11
CImage
Rank: 1
等 级:新手上路
帖 子:18
专家分:6
注 册:2010-8-24
收藏
得分:0 
搞什么啊,‘}’括号都少了一个。弱弱的请教高手一个问题,比较规则的C代码是不是都必须写成这样的格式:
int main(int argc, char* argv[])
{
    ...
    return 0;      
}
因为我已经习惯用void main()或者直接用main()类型了。所以请有经验的指导一下。
2010-08-30 12:15
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
必须加上int,
int main是最好的

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-08-30 12:26
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:10 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{   
    char **p,*y,*x;
    char a[4][30]={"abcdfe","bcdfeg","casdfdsf","dfdsafads"};
        int i,j;

    p = (char *)malloc(sizeof(char)*4);
        for(i=0;i<4;i++)
        {
        x=a[i];
      //      *(p+i)=x;                         //p是一个二级指针,不是指针数组,不能做+i的操作
        *(p+i)=x;                        //因为之前给二级指针分配了4个位置的空间,这样就可以了.也可以用指针数组代替
    }
    for(i=0;i<3;i++)
        for(j=i+1;j<4;j++)
        {    if(strcmp(*(p+i),*(p+j))>0)
            {
                y=*(p+i);
                *(p+i)=*(p+j);
                *(p+j)=y;
            }
        }
        for(i=0;i<4;i++)
            printf("%s\n",*(p+i));

    return 0;
}
2010-08-31 09:42
fedora13
Rank: 1
来 自:广东
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-8-15
收藏
得分:0 
回复 7楼 erikyo
是不是因为二维数组是由一个一维数组组成,同时每个元素又是由一个一维数组组成。
所以要在第一个一维数组的首地址乘以第二个一维数组的总数?

学习是要孤独,哪怕最后没有女朋友
2010-08-31 15:58
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:0 
以下是引用fedora13在2010-8-31 15:58:39的发言:

是不是因为二维数组是由一个一维数组组成,同时每个元素又是由一个一维数组组成。
所以要在第一个一维数组的首地址乘以第二个一维数组的总数?
首先你问这个问题原因是什么,
其次,我没理解你问的这个问题的意思?
2010-08-31 16:04
fedora13
Rank: 1
来 自:广东
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-8-15
收藏
得分:0 
回复 9楼 erikyo
是不是因为二维数组是由一个一维数组组成,同时每个元素又是由一个一维数组组成。
所以用二维指针的时候要在第一个一维数组的首地址乘以第二个一维数组的总数?

学习是要孤独,哪怕最后没有女朋友
2010-08-31 19:30
快速回复:指针的问题—请各位大哥帮帮忙
数据加载中...
 
   



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

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