请问这样用结构有什么问题,为什么会

chibs 2009-10-25 11:21:48

#define Maxdegree 100

typedef struct
{
int coeffArray[Maxdegree+1];
int HighPower;
} *Polynomial;

int main(void)
{
char c;

int i,j;
Polynomial p1,p2,result;
p1->HighPower=10;
for(i=1;i<=10;i++)
{
p1->coeffArray[i]=i;
}

p2->HighPower=5;
for(j=1;j<=5;j++)
{
p2->coeffArray[j]=j;
}
printf("%d\n",p1->HighPower);


为什么print出来是5?
在线等,谢谢
...全文
60 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chibs 2009-10-25
  • 打赏
  • 举报
回复
谢谢Jim的详细解答,果然是这样,不过之前已经结帖了,所以这次给不了分,不好意思
angel_su 2009-10-25
  • 打赏
  • 举报
回复
指针使用前,要指向一个存在的结构,或在堆上新开辟结构实体赋值给指针。直接对一个随机值操作结果未知,可能系统都要垮掉。
Jim_King_2000 2009-10-25
  • 打赏
  • 举报
回复
对不起,没有看到是C语言……

p1 = new Poly; // 记得使用delete释放该空间
改成
p1 = malloc(sizeof(Poly)); // 记得使用free释放该空间
Jim_King_2000 2009-10-25
  • 打赏
  • 举报
回复
lz定义的Polynomial是个指针类型。

Polynomial p1,p2,result;
因此p1,p2都是指针类型的变量。


p1->HighPower=10;
紧随其后的这条语句结果为定义。因为p1指向的地址未知。程序在此未崩溃只是巧合。

正确的做法是,申请一块空间。
typedef struct
{
int coeffArray[Maxdegree+1];
int HighPower;
} Poly, *Polynomial;

p1 = new Poly; // 记得使用delete释放该空间
或者使用栈变量:
Poly p1;
p1.HighPower = ...;
chibs 2009-10-25
  • 打赏
  • 举报
回复
应该是的我编译器出问题了,谢谢帮忙
hua_cai 2009-10-25
  • 打赏
  • 举报
回复
我也输出10,有什么问题么?
chibs 2009-10-25
  • 打赏
  • 举报
回复
之前都没问题的说。。。

谢谢了,我用VC试下
chibs 2009-10-25
  • 打赏
  • 举报
回复
Orz...我用的是VS08
blice 2009-10-25
  • 打赏
  • 举报
回复
lz用的什么编译器啊?
我的结果是10……

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧