语言之结构体复习"/>
翁凯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语言之结构体复习
发布评论