| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5676 人关注过本帖
标题:万恶的指针(1)...
只看楼主 加入收藏
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
结帖率:97.3%
收藏
已结贴  问题点数:5 回复次数:15 
万恶的指针(1)...
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
                                                    //这个程序主要功能是输入 如  "huieoqjalf" 连续的字母排序。

    void sort(char *,int);

    int input_sum = 0;
    char *p = (char *)malloc(sizeof(char) * 100);

    do
        {
            scanf ("%s",p);
            input_sum = strlen(p);
        }
    while (getchar() != '\n');

    realloc(p,input_sum);

    sort (p,input_sum);

    return 0;
}

void sort(char *p,int input_sum)

{

    int i,j;

    char *temp;

    for(j = 0;j < input_sum;j++)
        {
            for (i = 0;i < input_sum - j - 1;i++)
                if (*(p+i) > *(p+i+1))
                    {
                        temp = *(p + i);            //同类型的指针赋值
                        *(p + i) = *(p + i + 1);    //42,44行有提醒。求解。

  /*                       /main.c||In function ‘sort’:|
/main.c|42|warning: assignment makes pointer from integer without a cast [enabled by default]|        分配整数赋给指针,未作类型转换 ,相同类型还转?怎么转。。。
/main.c|44|warning: assignment makes integer from pointer without a cast [enabled by default]|        指针赋给整数,未作类型转换?
/main.c||In function ‘main’:|
/main.c|22|warning: ignoring return value of ‘realloc’, declared with attribute warn_unused_result [-Wunused-result]|      这句也不理解
||=== Build finished: 0 errors, 3 warnings ===|  
*/

                        *(p+i+1) = temp;            //这个程序还有什么可以改的地方吗,请指教
                    }

        }

    for (i = 0;i < input_sum;i++)

        printf ("%c",*(p+i));

}
搜索更多相关主题的帖子: void include return 
2012-08-22 09:58
血祭幻岚
Rank: 2
等 级:论坛游民
帖 子:29
专家分:72
注 册:2012-3-21
收藏
得分:1 
  temp = *(p + i);     *(p+i+1) = temp;    这两个,temp是指针,你怎么能将值付给指针呢,可以这样写 * temp = *(p + i),*(p+i+1) = *temp; ;同时注意temp要先给它分配空间temp=(char *)malloc(sizeof(char));
2012-08-22 10:31
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
指针用错了 还说是万恶。。
2012-08-22 10:33
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
收藏
得分:0 
temp = *(p + i);     *(p+i+1) = temp;    这两个,temp是指针,你怎么能将值付给指针呢
这样写也不报错呀

为什么要给temp分配空间呢,temp只是一个中转的指针啊


总有人比你努力,可怕的是比你牛的人比你还努力。
2012-08-22 10:36
血祭幻岚
Rank: 2
等 级:论坛游民
帖 子:29
专家分:72
注 册:2012-3-21
收藏
得分:0 
回复 4楼 admin_xyz
其实你只是交换两个值,又不要交换指针,temp根本不需要将它设成指针类型
2012-08-22 10:39
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:2 
以下是引用admin_xyz在2012-8-22 10:36:19的发言:

temp = *(p + i);     *(p+i+1) = temp;    这两个,temp是指针,你怎么能将值付给指针呢
这样写也不报错呀

为什么要给temp分配空间呢,temp只是一个中转的指针啊

简单来说加星号就是寻址 指针也就变成变量了 变量和指针赋值 报错也就很正常了
2012-08-22 10:41
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
收藏
得分:0 
回复 3楼 zklhp
好吧,是万恶的我

总有人比你努力,可怕的是比你牛的人比你还努力。
2012-08-22 10:43
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
收藏
得分:0 
回复 6楼 zklhp
可是那样写不报错

总有人比你努力,可怕的是比你牛的人比你还努力。
2012-08-22 10:44
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
收藏
得分:0 
程序代码:
void sort(char *p,int input_sum)

{

    int i,j;

//    char *temp = (char *)malloc(sizeof(char));            //还是不明白为什么要分配空间
    char temp;

    for(j = 0;j < input_sum;j++)
        {
            for (i = 0;i < input_sum - j - 1;i++)
                if (*(p+i) > *(p+i+1))
                    {
                        temp = *(p + i);
                        *(p + i) = *(p + i + 1);
                        *(p+i+1) = temp;                //这样写简单哈...
                    }

        }

    for (i = 0;i < input_sum;i++)

        printf ("%c",*(p+i));

}

总有人比你努力,可怕的是比你牛的人比你还努力。
2012-08-22 10:45
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:1 
回复 9楼 admin_xyz
你这个写的还是有问题,temp 是一个指针类型,而 *(p+1)这个是字符 变量  不能把一个字符型 变量赋值给指针的!
至于  char *temp = (char *)malloc(sizeof(char));            //还是不明白为什么要分配空间
你可以编写一个小程序测试:
 char * temp ;
* temp = 'a';
这样运行看会不会报错,你就明白了为什么要分配空间了
--------------------------------------------------------
char * p  这样只是分配一个内存空间给你,但是没有指明给你的是哪段内存,所以 * temp 赋值的时候会报错!
char *temp = (char *)malloc(sizeof(char)); 这个就不一样,定义了一个指针变量 temp 同时在内存中指明了 哪段内存是 可以用的!所以再  * temp 赋值的时候就不会报错!


[ 本帖最后由 q215236213 于 2012-8-22 12:40 编辑 ]
2012-08-22 12:36
快速回复:万恶的指针(1)...
数据加载中...
 
   



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

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