结构体成员输出出现问题。

firsun 2008-12-10 10:16:58
大家好,问一个问题.
在下面程序中,在main函数中
输出成员last的值时(红色字部分),第一次输出正常,
同样输出但第2次就不对了?什么原因?

另外 在tc++3.0下为什么给结构体成员m赋值
输出的却是-NAM ?什么原因
#include<stdio.h>
#define MAXSIZE 1000
typedef struct
{
int elem[MAXSIZE];
int last;
float m;
}Seqlist;

Seqlist *init(int n)
{
Seqlist list;
int i;
for(i=0;i<n;i++)
{
list.elem[i]=i;
}
list.last=i;
list.m=9.6;
return(&list);
}

void main(void)
{
int n=5;
Seqlist *p;
p=init(n);
printf("%d",p->last);
printf("\n %d",p->last);

printf("\n %f",p->m); tc++3.0下输出-NAM 什么原因?
}
...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bill830711 2008-12-16
  • 打赏
  • 举报
回复
另外 在tc++3.0下为什么给结构体成员m赋值
输出的却是-NAM ?什么原因

这个能不能讲清楚一点,不是很明白什么意思
  • 打赏
  • 举报
回复
呵呵,虽然这样容易导致线程安全。。。
  • 打赏
  • 举报
回复
Seqlist *init(int n)
{
static Seqlist list;
bill830711 2008-12-10
  • 打赏
  • 举报
回复
说了是返回局部变量的问题
你程序中的错误都是这个引起的,改过来就好了


int init(Seqlist *list, int n)
{
int i;
for(i=0;i<n;i++)
{
list.elem[i]=i;
}
list.last=i;
list.m=9.6

return 0;
}

void main(void)
{
int n=5;
Seqlist list;
if(0 != init(&p,n))
{
//error
}
//TODO
}


firsun 2008-12-10
  • 打赏
  • 举报
回复
改正

#include<stdio.h>
#define MaxSize 50
typedef struct
{
int data[MaxSize];
int length;
}SqList;

void CreateList(SqList *L,int a[],int n)
{
int i;
for(i=0;i <n;i++)
L->data[i]=a[i];
L->length=n;
}

void main(void)
{
SqList list,*p=&list;
int i,n=10;
int num[10]={1,2,3,4,5,6,7,8,9,10};
CreateList(&list,num,10);
printf("%d",p->length);
printf("%d",p->length);
for(i=0;i<list.length;i++)
{
printf("\n %d",p->data[i]);
}
}
firsun 2008-12-10
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20081210/10/694875e9-4669-450e-9532-dbbeca8392c8.html
firsun 2008-12-10
  • 打赏
  • 举报
回复
定义了一个 Seqlist类型变量,并对其成员操作。然后返回存储单元首地址。

错误之处(第2次输出错误),能否帮忙改下?

bill830711 2008-12-10
  • 打赏
  • 举报
回复
init 返回了一个指向局部变量的指针...,这个是c中很容易犯的错误,也应该很多地方都会强调的才对

这种的调用一般是要把初始话的那个变量用指针传递进去的

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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