当前位置:首页 » 编程语言 » 返回结构体指针c语言

返回结构体指针c语言

发布时间: 2023-01-17 20:18:51

c语言函数能不能返回结构体

c语言函数可以返回结构体,操作方法如下:

1、首先在电脑中打开visual studio新建项目,给这个结构体取个名字叫student。

㈡ C语言返回结构的指针问题

直接把结构体变量传递参数是传值,

st *fun(struct st x)

这里的形参x其实是传递的实参y的拷贝,这和形参不能影响实参是同样的道理。而且x在fun函数结束后就被系统回收了,取得的地址当然就成野指针了,所以应该用结构体指针传递参数:

#include"stdio.h"
#include"string.h"
structst
{
inta;
charb[10];
};
voidfun(structst*px)
{
px->a=100;
strcpy(px->b,"99999");
}
intmain()
{
structsty,*p;
p=&y;
y.a=999;
strcpy(y.b,"0");
printf("y.a=%dy.b=%s ",y.a,y.b);
fun(p);
printf("(*p).a=%d(*p).b=%s ",(*p).a,(*p).b);
}

㈢ 求解一个c语言函数返回结构体指针的问题

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<fstream>
#include<stdlib.h>
usingnamespacestd;

typedefstructpoint{//结构体设计
intA,B,C,a,b,c,id,n;
}point;
point*ReadFile(){
staticpointss[110];
chardata[50]={''};
intm1=0,n=0,k,i;
for(inti=0;i<100;i++){
ss[i].id=rand()%10;
ss[i].A=rand()%10;
ss[i].B=rand()%10;
ss[i].C=rand()%10;
ss[i].D=rand()%10;
ss[i].E=rand()%10;
ss[i].F=rand()%10;
}
returnss;
}
voidmain(){
pointmale[110],female[110],players[110];
male=ReadFile();
}

ss是局部变量,有效范围只局限于定义ss的函数体内,即只在函数ReadFile里有效,函数返回后,ss就失效了。

你可以在ReadFile里定义ss的前面加上static修饰,表示这个是静态局部变量,静态局部变量的内存有效范围可以全局有效。

static point ss[110];

另外,结构体的typedef定义不完整。

㈣ c语言函数返回字符串时必须要用指针吗如果返回结构体呢函数在返回那些类型值时必须要用指针

所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
定义指针型函数的一般形式为:
类型说明符 *函数名(形参表)
{
…… /*函数体*/
}
其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。
如:
int *ap(int x,int y)
{
...... /*函数体*/
}
表示ap是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。
【例】本程序是通过指针函数,输入一个1~7之间的整数,输出对应的星期名。
main(){
int i;
char *day_name(int n);
printf("input Day No:\n");
scanf("%d",&i);
if(i<0) exit(1);
printf("Day No:%2d-->%s\n",i,day_name(i));
}
char *day_name(int n){
static char *name[]={ "Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
return((n<1||n>7) ? name[0] : name[n]);
}

本例中定义了一个指针型函数day_name,它的返回值指向一个字符串。该函数中定义了一个静态指针数组name。name数组初始化赋值为八个字符串,分别表示各个星期名及出错提示。形参n表示与星期名所对应的整数。在主函数中,把输入的整数i作为实参,在printf语句中调用day_name函数并把i值传送给形参n。day_name函数中的return语句包含一个条件表达式,n值若大于7或小于1则把name[0]指针返回主函数输出出错提示字符串“Illegal day”。否则返回主函数输出对应的星期名。主函数中的第7行是个条件语句,其语义是,如输入为负数(i<0)则中止程序运行退出程序。exit是一个库函数,exit(1)表示发生错误后退出程序,exit(0)表示正常退出。
应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别。如int(*p)()和int *p()是两个完全不同的量。
int (*p)()是一个变量说明,说明p是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p)的两边的括号不能少。
int *p()则不是变量说明而是函数说明,说明p是一个指针型函数,其返回值是一个指向整型量的指针,*p两边没有括号。作为函数说明,在括号内最好写入形式参数,这样便于与变量说明区别。
对于指针型函数定义,int *p()只是函数头部分,一般还应该有函数体部分。

在ANSI C标准中允许用结构变量作函数参数进行整体传送。但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时由实参传向形参的只是地址,从而减少了时间和空间的开销。
【例】计算一组学生的平均成绩和不及格人数。用结构指针变量作函数参数编程
struct stu
{
int num;
char *name;
char sex;
float score;}boy[5]={
{101,"Li ping",'M',45},
{102,"Zhang ping",'M',62.5},
{103,"He fang",'F',92.5},
{104,"Cheng ling",'F',87},
{105,"Wang ming",'M',58},
};
main()
{
struct stu *ps;
void ave(struct stu *ps);
ps=boy;
ave(ps);
}
void ave(struct stu *ps)
{
int c=0,i;
float ave,s=0;
for(i=0;i<5;i++,ps++)
{
s+=ps->score;
if(ps->score<60) c+=1;
}
printf("s=%f\n",s);
ave=s/5;
printf("average=%f\ncount=%d\n",ave,c);
}

本程序中定义了函数ave,其形参为结构指针变量ps。boy被定义为外部结构数组,因此在整个源程序中有效。在main函数中定义说明了结构指针变量ps,并把boy的首地址赋予它,使ps指向boy数组。然后以ps作实参调用函数ave。在函数ave中完成计算平均成绩和统计不及格人数的工作并输出结果。
由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。

㈤ C语言返回结构指针的函数

进入fun函数时,会创建一个局部变量形参stu,这个形参stu与实参stu1不是一回事,stu只是与stu1数据一模一样的复制品而已。当fun函数对stu操作结束后返回stu的指针,但因为stu是局部变量,在fun函数结束后会释放掉,由于main函数使用fun函数返回的指针pp,pp指向了已被释放掉的stu,所以打印时必然输出些乱码。

热点内容
疫情源码 发布:2025-07-16 18:34:53 浏览:793
安卓开发平台怎么样 发布:2025-07-16 18:30:35 浏览:344
电话加密码 发布:2025-07-16 18:29:12 浏览:65
河马云脚本 发布:2025-07-16 18:29:03 浏览:147
格物致知编程 发布:2025-07-16 18:07:54 浏览:947
戴尔服务器系统设置如何设置 发布:2025-07-16 18:02:09 浏览:958
为什么换安卓这么难 发布:2025-07-16 17:14:44 浏览:421
转动密码锁怎么开 发布:2025-07-16 17:14:37 浏览:611
服务器和网关ip 发布:2025-07-16 17:09:35 浏览:930
如何用net映射服务器盘符 发布:2025-07-16 17:08:50 浏览:13