注册 登录
编程论坛 C++教室

指针赋值的区别,请指教

meimeng515 发布于 2009-10-06 23:40, 526 次点击
//有一个问题
#include <iostream.h>


struct Person
{
  char name[20];
  unsigned long id;
  float salary;


};
Person num[6]={{"jone",12345,339},
{"david",1382,449.0},{"marit",27614,311},{"jasen",4235,623},{"peter",23876,400},{"yoke",12335,511}};

void main()
{
    Person *p1[6]={&num[0],&num[1],&num[2],&num[3],&num[4],&num[5],};
    //Person *p1=num;替换上一句为什么不行??????????
    Person *temp;
    for(int k=0;k<6;k++)
   {
      cout<<p1[k]->name<<endl;
  
   }
  /*
  最简单的一种方式
    Person temp;
    for(int i=1;i<6;i++)
        for(int j=0;j<6-i;j++)
        {
          if(p1[j]->salary>p1[j+1]->salary)
          {
            temp=p1[j];
            p1[j]=p1[j+1];
            p1[j+1]=temp;
         
         
          }
        
        
        }
  
  
  
  */


}

7 回复
#2
meimeng5152009-10-06 23:52
这里面怎么没人回呀
#3
flyingcloude2009-10-06 23:54
不知道你报什么错误,我在能够正确运行的
#4
最左边那个2009-10-07 13:28
Person *p1=num;
这一句中,num是长度为6的结构数组的地址,而Person *p1定义出来的是结构类型的指针变量(非结构数组指针变量),这两者在类型上就不一样了,所以,就不能用Person *p1=num替换!
#5
flyingcloude2009-10-07 15:55
回复 4楼 最左边那个
这样赋值肯定是没有错的。只是他自己的程序的循环中还有一点需要作修改。
把原先的那个修改成红色的,那就行了

#include <iostream.h>


struct Person
{
  char name[20];
  unsigned long id;
  float salary;


};
Person num[6]={{"jone",12345,339},
{"david",1382,449.0},{"marit",27614,311},{"jasen",4235,623},{"peter",23876,400},{"yoke",12335,511}};

void main()
{
 //   Person *p1[6]={&num[0],&num[1],&num[2],&num[3],&num[4],&num[5],};
    Person *p1=num;//替换上一句为什么不行??????????
    Person *temp;
    for(int k=0;k<6;k++)
   {
      cout<<p1[k].name<<endl;
 
   }
}
#6
最左边那个2009-10-07 18:47
回复 5楼 flyingcloude
哦,不好意思,是我搞错,抱歉抱歉,误人子弟了!哈
#7
fgchg9112009-10-08 04:49
回复 楼主 meimeng515
cout<<p1[k]->name<<endl;
这里p1[k]已经是间接访问,可以改成
p1[k].name

(p1+k)->name
#8
meimeng5152009-10-09 15:13
谢谢大家啊
1