翁凯C语言之结构体复习

编程入门 行业动态 更新时间:2024-10-28 08:21:32

翁凯C<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言之结构体复习"/>

翁凯C语言之结构体复习

结构体

结构体很久没用,复习一下

示例引入

#include<stdio.h>
int main(int argc,char const *argv[])
{struct date{int month;int day;int year;};//分号不能少struct date today;today.month=07;today.day=31;today.year=2023;printf("Today's date is %i-%i-%i.",today.year,today.month,today.day);return 0;
}

"%i"是一种通用的整数格式说明符,它可以处理以不同进制表示的整数,例如十进制、八进制和十六进制。

C语言还提供了其他整数格式说明符,如

“%d”(用于十进制整数)

“%x”(用于十六进制整数)等

和本地变量一样,在函数内部声明的结构类型只能在函数内部使用,所以通常在函数外部声明结构类型,这样就可以被多个函数所使用。

#include<stdio.h>struct date{int month;int day;int year;};//分号不能少int main(int argc,char const *argv[])
{struct date today;today.month=07;today.day=31;today.year=2023;printf("Today's date is %i-%i-%i.",today.year,today.month,today.day);return 0;
}

声明结构体的形式

形式一

struct point{int x;int y;
};struct point p1,p2;

p1和p2都是point,都有x,y

形式二

无名结构

struct{int x;int y;
}p1,p2;

形式三

struct point{int x;int y;
}p1,p2;

结构体的初始化

struct date today={07,31,2023};
struct date this month={.month=07,.year=2023};//day会被赋为0(类比数组)

结构指针

和数组不同,结构变量的名字并不是结构变量的地址,必须使用&运算符

struct date *pDate = &today;

结构与函数

结构作为函数参数

整个结构可以作为参数的值传入函数,这时候是在函数内新建一个结构变量,并复制调用者的结构的值。也可以返回一个结构。

int numberOfDays(struct date d) 

输入结构

C在函数调用的时候是传值的,在结构函数中scanf赋值后需要返回一个值

#include<stdio.h>struct point{int x;int y;
};struct point getStruct(void);
void outStruct(struct point p);int main(int argc,char const *argv[])
{struct point y={0,0};y=getStruct();outStruct(y);
}struct point getStruct(void)
{struct point p;scanf("%d",&p.x);scanf("%d",&p.y);printf("%d,%d\n",p.x,p.y);return p;
}void outStruct(struct point p)
{printf("%d,%d",p.x,p.y);
}

结构指针作为参数

lf a large structure is to be passed to a function, it is generally more efficient to pass a pointer than to copy the whole structure.

指向结构的指针

struct date{int month;int day;int year;
}myday;struct date *p=&myday;
(*p).month=12;
p->month=12;//等价上条语句,英文读作:p arrow month

用 -> 表示指针所指的结构变量中的成员。

利用传指针的思想修改上述输入结构中的程序

#include<stdio.h>struct point{int x;int y;
};struct point* getStruct(struct point*);//第一个struct point*指函数的返回类型,第二个struct point*指传入函数的类型
void output(struct point);
void print(const struct point *p);int main(int argc,char const *argv[])
{struct point y={0,0};getStruct(&y);output(y);
//	output(*getStruct(&y));//用*取出getStruct返回的东西
//	print(getStruct(&y));
}struct point* getStruct(struct point* p)
{scanf("%d",&p->x);scanf("%d",&p->y);printf("%d,%d\n",p->x,p->y);return p;
}void output(struct point p)
{printf("%d,%d",p.x,p.y);
}void print(const struct point *p)
{printf("%d,%d",p->x,p->y);
}

自定义数据类型

C语言提供了一个叫做 typedef 的功能来声明一个已有的数据类型的新名字。

比如:

typedef int Length;//Length等价于int类型 
typedef char* Strings[10];//Strings等价于10个字符串的数组的类型
typedef struct node{int date;struct node *next;
}aNode;
//aNode等价于struct node
//也可以写成
typedef struct node aNode;

更多推荐

翁凯C语言之结构体复习

本文发布于:2023-11-15 00:00:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1590096.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言   结构   翁凯

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!