求高手指教c语言函数怎么返回结构体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求高手指教c语言函数怎么返回结构体相关的知识,希望对你有一定的参考价值。

懂这个的教教我,求你把已经执行成功的代码发上来,不要结构体指针的。谢谢啦。

#include "stdio.h"

struct abc

int a;

int b;

char *p;

;

struct abc myabc(void)

struct abc n;

n.a=2;

n.b=3;

n.p=(char *)0x00FF3304;

return n;


void main(void)

struct abc x=1,2,(char *)0x00FF3300,y;

y=myabc();

printf("%d %d %p\\n%d %d %p\\n",x.a,x.b,x.p,y.a,y.b,y.p);

扩展资料:

在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。 

C++提供了许多种基本的数据类型(如int、float、double、char等)供用户使用。由于程序需要处理的问题往往比较复杂,而且呈多样化,已有的数据类型显得不能满足使用要求。C++允许用户根据需要自己声明一些类型,用户可以自己声明的类型还有结构体类型(structure)、共用体类型(union)、枚举类型(enumeration)、类类型(class )等,这些统称为用户自定义类型(user-defined type,UDT)。

参考技术A 函数是可以返回结构体的。方法如下:(其它类似)
以前以为函数的返回值只能是基本类型,但是今天被高手指出,函数的返回值可以是结构体的,特此编写了如下的测试程序:让大家见笑了。
#include <stdio.h>
typedef struct
int a;
int b;
int c;
str;
str change(str s)

s.a += 1;
s.b += 1;
s.c += 1;
return s;


int main(void)

str s1, s2;
s1.a = 1;
s1.b = 1;
s1.c = 1;
s2 = change(s1);
printf("s1.a = %d\ts1.b = %d\ts1.c = %d\n",s1.a, s1.b, s1.c);
printf("s2.a = %d\ts2.b = %d\ts2.c = %d\n",s2.a, s2.b, s2.c);
return 0;
参考技术B 下面的代码告诉你一个事实:你的想法是可以实现的!
#include "stdio.h"//
struct abc
int a;
int b;
char *p;
;
struct abc myabc(void)
struct abc n;
n.a=2;
n.b=3;
n.p=(char *)0x00FF3304;
return n;

void main(void)//试试正确不?
struct abc x=1,2,(char *)0x00FF3300,y;
y=myabc();
printf("%d %d %p\n%d %d %p\n",x.a,x.b,x.p,y.a,y.b,y.p);

接收结构变量y必须与返回结构是同一个类型。追问

1、您的代码是唯一正确的。谢谢,另外求教,能用结构体做返回值的函数有没法带参数。

追答

可以带任何合法的参数,这没有限制,你只管把结构体看作一个变量得了——结构体本来就是一种变量类型,自定义数据类型……

追问

我没有验证就妄问。现在我发现在函数内的结构体语句前面,定义变量有错,把结构体语句放到函数第一句就没错。求解啊。

追答

这是带形参的返回结构的函数实例,供参考……
#include "stdio.h"
struct abc
int a;
int b;
double *p;
;
struct abc myabc(struct abc n)
n.a++;
n.b--;
n.p++;
return n;

void main(void)//试试正确不?
struct abc x=1,2,(double *)0x00FF3300,y;
y=myabc(x);
printf("%d %d %p\n%d %d %p\n",x.a,x.b,x.p,y.a,y.b,y.p);

没有明白“n.a=函数的参数有点难”的意思。n.a就是结构体n中的成员变量a,n.只是对a的限制而已。

本回答被提问者和网友采纳
参考技术C #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct people

char name[20];
int age;
;
people get_one_people()

people tom;
strcpy(tom.name,"tom");
tom.age = 24;
return tom;

void main()

people someone = get_one_people();
printf("姓名:%s\\t年龄:%d\\n",someone.name,someone.age);
system("pause");



不适用 结构体内 有指针类型的结构体.

如果一定要有指针, 最好用c++的引用传递 或者 2级指针

参考技术D typedef struct

int a;
int b;
A;

A getStruct()

A temp;
temp.a = 10;
temp.b = 20;
return temp;

int main()

A a = getStruct();
printf("A.a = %d, A.b = %d\n", a.a, a.b);
return 0;

结构体数组怎么做函数参数

定义了一个结构体数组STUDENT student[200]; 如何用作函数参数如:void Label();函数里面要对数组的元素student[i].元素做操作 怎么实现 小白求高手详解

括号中加入STUDENT gh[]
首先要在主函数前定义void Label(STUDENT *[])但在STUDENT 定义之后
引用时Label(student) student本身就是地址 这是数组和结构体的性质
此时引用的是首地址,可在引用后对地址进行j=0循环加1到下一个结构体进行操作,如gh[j]追问

void Label(STUDENT *[]) *后面直接加[]么?还有就是我需要的是之前student[i].元素已经在一个for循环体内,并且每一次循环的i已经固定 怎么操作啊

追答

再定义一个变量,两个不影响

追问

我的意思是for(i;i<num,i++) .... void Label() .... void Label()中的i要与for循环的一致,不需要全部的怎么实现啊? 另外STUDENT *[] *[]这个是什么意思 呢 可以直接用么

追答

那就在自定义函数中不用自变量i,在调用时给地址加1就可以了直接进行操作

参考技术A 以C/C++为例,数组作为函数参数会转化为指针,结构体数组也不例外,会转化为指向该结构体类型的指针。
比如
struct A;
void foo(struct A*);
A a[10];
foo(a); //正确

以上是关于求高手指教c语言函数怎么返回结构体的主要内容,如果未能解决你的问题,请参考以下文章

C语言,宏定义和结构体指针问题,求高手解答啊,谢谢了!!

关于c语言超长正整数相加的问题,。求高手指教!!!!!

c语言 结构体的指针作为函数参数问题

在C语言中,怎么样定义结构体数组为全局变量?定义一个无返回值的函数,但是函数有参数可以吗?

C语言函数中如何返回一个结构体类型

C语言结构体指针定义问题 - C / C++ -