| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 416 人关注过本帖
标题:指针的一个问题
只看楼主 加入收藏
qingke
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2011-2-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
指针的一个问题
#include "stdio.h"
void main(void)
{
struct student{
unsigned int num ;
float score;
}stu[3]={{20110205,100},{20110215,99},{20110225,88}};
struct student *p;
int i;
for(i=0;i<3;i++)
{
 for(p=stu;p<=&stu[2];p++)
  {
    if(p->score>(p+1)->score)
    {
     struct student *p0,*p1;
     p1=(p+1);
     *p0=*p;
     *p=*(p+1);
     *p1=*p0;  
    }
  }
}
printf("%d%.1%f",stu[0].num,stu[0].score);
system("cls");
return(0);
}
程序能够生成,语法是没问题的。但是在运行到 *p0=*p;这一语句的时候,就会出现内存错误,我从VS2010看到的此时p0的指针地址是未知的,指针内容也是未知,但是我已经把p地址的内容给了p0,为什么还会这样子呢?
如果这样子不行的话,还有什么办法可以来交换两个指针的内容呢?
搜索更多相关主题的帖子: include system return 
2011-02-25 12:20
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:15 
程序代码:
#include "stdio.h"

void main(void)
{

struct student{
unsigned int num ;
float score;
}stu[3]={{20110205,100},{20110215,99},{20110225,88}};

struct student *p;
int i;

for(p=stu;p<=&stu[2];p++)
  {
    if(p->score > (p+1)->score)
    {
       student temp = {0};
       temp = *(p+1);
       *(p+1) = *p;
       *p = temp;
    }
  }

printf("%d%.1%f",stu[0].num,stu[0].score);
//system("cls");

}
加一个临时的变量就可以了

                                         
===========深入<----------------->浅出============
2011-02-25 13:03
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
回复 2楼 laoyang103
请问你用什么编译器,你这个程序不能通过VS2010

小代码,大智慧
2011-02-25 13:20
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:5 
程序代码:
#include <stdio.h>

int main(void)
{
    struct student{
      unsigned int num ;
      float score;
      }
    stu[3]={{20110205,100},{20110215,99},{20110225,88}};
    struct student *t[3]={&stu[0],&stu[1],&stu[2]};
    struct student *p;
    int i,j;

        for(i=0;i<3;i++)
    {
     
        for(j=0;j<2;j++)
        {
            if(t[j]->score>t[j+1]->score)
            {
                p = t[j];
                t[j] = t[j+1];
                t[j+1] =p;
            }
        }
     }
        printf("%d %f",t[0]->num,t[0]->score);

 getchar();

 getchar();


 return(0);
}
目前可以解决方法是这个

小代码,大智慧
2011-02-25 13:21
qingke
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2011-2-24
收藏
得分:0 
回复 3楼 点线面
把student temp={0};
改成struct student temp={0};
然后就可以编译了,也符合我的要求。
2011-02-25 22:15
qingke
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2011-2-24
收藏
得分:0 
回复 4楼 点线面
我用2楼的办法改好了,你的办法还需要加入新的指针,所以比2楼的看起来麻烦不少,所以很抱歉,分就不给你了。
2011-02-25 22:18
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
回复 5楼 qingke
楼主用什么编译器,我用VS 2010是不过的。

小代码,大智慧
2011-02-25 22:19
qingke
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2011-2-24
收藏
得分:0 
回复 7楼 点线面
我的也是VS2010的,按照2楼的程序是过不了的,把student temp改成struct student temp之后就可以了
2011-02-26 00:47
bowenpro
Rank: 2
等 级:论坛游民
帖 子:7
专家分:16
注 册:2011-2-23
收藏
得分:0 
程序代码:
#include "stdio.h"
#include "process.h"



void main(void)
{
    struct student{
        unsigned int num ;
        float score;
    }stu[3]={{20110205,100},{20110215,99},{20110225,88}};

    struct student *p;
    struct student *q;

    int i;

    for(i=0;i<3;i++)
    {
        //for(p=stu;p<=&stu[2];p++)
        //{
        for (int j = 0; j < 3; j++)
        {
       
            p = &stu[i];
            q = &stu[j];

            if(p->score > q->score)
            {
                //struct student *p0,*p1;
                //p1=(p+1);
                //*p0=*p;
                //*p=*(p+1);
                //*p1=*p0;  

                struct student *temp;

                p = temp;
                temp = q;
                q = p;

            }
        }
    }

    printf("%d%f",stu[0].num,stu[0].score);
   
    //system("cls");
   
    return;
}
2011-02-26 09:31
快速回复:指针的一个问题
数据加载中...
 
   



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

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