社区
C语言
帖子详情
关于c指针数组返回值,谢谢赐教
kawayi_kai
2009-06-12 01:53:36
1.当返回一个结构的指针数组时,以xx**形式的返回值返回,并以xx**的变量接受,为什么在使用时会出错?第一次打印xx[0]->x可以正确打印而第二次xx[1]->x,就不能显示其值了
2.我用一个结构指针指向5*sizeof(结构)的内存,通过指针的地址偏移找到其值,但是在free(指针)的时候总是报错,为什么?
...全文
40
3
打赏
收藏
关于c指针数组返回值,谢谢赐教
1.当返回一个结构的指针数组时,以xx**形式的返回值返回,并以xx**的变量接受,为什么在使用时会出错?第一次打印xx[0]->x可以正确打印而第二次xx[1]->x,就不能显示其值了 2.我用一个结构指针指向5*sizeof(结构)的内存,通过指针的地址偏移找到其值,但是在free(指针)的时候总是报错,为什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kawayi_kai
2009-06-12
打赏
举报
回复
谢谢您
wanyuzhen
2009-06-12
打赏
举报
回复
第一问,data *datas[5]是栈区的,在函数返回时销毁
/*读数据*/
data ** readdatas();
data** searchdatas(data**);
void sortdatas(data**);
void writedatas(data**);
int main(int argc, char *argv[])
{
int i;
data **datas;
datas = readdatas();
for(i=0;i <5;i++)
{
printf("%d,%d,%d\n",datas[i]->x,datas[i]->y,datas[i]->z);
}
for(i=0;i <5;i++)
{
free(datas[i]);
}
free(datas);
return 0;
}
data ** readdatas()
{
int i;
data **datas = (data**)malloc(sizeof(data*) *5);
for(i=0;i <5;i++)
{
datas[i]=(data*)malloc(sizeof(data));
datas[i]->x=abs(rand())%900+100;
datas[i]->y=abs(rand())%900+100;
datas[i]->z=abs(rand())%900+100;
}
return datas;
}
kawayi_kai
2009-06-12
打赏
举报
回复
附加上代码:
第一问:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define COUNT 5;
typedef struct
{
int x,y,z;
}data;
/*读数据*/
data** readdatas();
data** searchdatas(data**);
void sortdatas(data**);
void writedatas(data**);
int main(int argc, char *argv[])
{
int i;
data **datas;
datas=readdatas();
for(i=0;i<5;i++)
{
printf("%d,%d,%d\n",datas[i]->x,datas[i]->y,datas[i]->z);
}
for(i=0;i<5;i++)
{
free(datas[i]);
}
return 0;
}
data** readdatas()
{
int i;
data *datas[5];
for(i=0;i<5;i++)
{
datas[i]=(data*)malloc(sizeof(data));
datas[i]->x=abs(rand())%900+100;
datas[i]->y=abs(rand())%900+100;
datas[i]->z=abs(rand())%900+100;
}
return datas;
}
第二问:
#include <stdio.h>
#include <malloc.h>
#define MAX 10
typedef struct
{
int id;
char *name;
int score;
} stu;
stu* readDatas();
stu* searchLowest(stu*);
void outdata(stu* data);
int main(int argc, char *argv[])
{
int num;
stu *datas;
datas=readDatas();
for(num=0;num<MAX;num++)
{
printf("%s\n",(datas+num)->name);
}
//outdata(searchLowest(datas));
for(num=0;num<MAX;num++)
{
free((datas+num)->name);
(datas+num)->name=NULL;
}
free(datas);
return 0;
}
stu* readDatas()
{
stu *datas;
FILE *file;
int index;
datas=(stu*)malloc(MAX*sizeof(datas));
if((file=fopen("d:\\in.txt","rt"))!=NULL)
{
for(index=0;index<MAX;index++)
{
(datas+index)->name=(char*)malloc(4*sizeof(char));
fscanf(file,"%d %s %d\n",&(datas+index)->id,(datas+index)->name,&(datas+index)->score);
}
}
fclose(file);
return datas;
}
stu* searchLowest(stu* datas)
{
int min=datas->score;
int index=0;
int num;
for(num=1;num<MAX;num++)
{
int score=(datas+num)->score;
if(score<min)
{
min=score;
index=num;
}
}
return (datas+index);
}
void outdata(stu* data)
{
FILE *file;
if((file=fopen("d:\\out.txt","wt"))!=NULL)
{
fprintf(file,"%d %s %d\n",data->id,data->name,data->score);
}
fclose(file);
}
C++ 如何引用结构体数组作为函数形参
最近使用VS2008编写程序时,遇到了如何引用结构体数组作为函数形参问题。 现将主要代码粘贴如下(结果如图所示),来达到传递结构体数组到函数中的目的: ////--main.cpp--///// #include "Point.h"#include#include using namespace std;typedef struct //定义结构体 { int num
C语言指针选择题
大学牲的C语言作业选择题
C语言qsort函数使用详解
qsort函数参数 void qsort(voidBase,size_t_numberofelement,size_t_Sizeofelement,int(_cdecl_ptfuncCompare)(constvoid,constvoid)); 第一个参数voidBase,这实际上是一个不定类型的指针,通常称为数组名,但是实际上并不局限于数组名,可以延伸出更多用途。 第二个参数size_t_numberofelement,数组中元素的个数。 第三个参数size_t_Sizeofelement,元素的大小。
指针的深度理解
指针是地址,地址是数据,数据可以用空间来储存;指针变量则是一种变量,一种用来保存指针地址的变量。若是要区分这两种概念,首先要明确变量的两个属性:变量有两个属性,一个是左值(空间,存放内容的空间),另一个则是右值(数据,占具体内存的数据)。那么对于指针,既然是地址,那么则可理解为右值。但对于指针变量,它是变量,则存在两个属性,左值和右值。在解释之前,举个例子:如果学校领导要去学生公寓中找学生,若果没有宿舍的门牌号,那么领导只能按着楼层去一层一层的寻找目标宿舍,其过程十分繁琐。
【c++】getline导致文件读入指针跳为-1
使用fstream的getline函数后,如果没能读完一行,无论哪个重载,都会把该fstream的文件指针跳到-1。 怎么办?
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章