在C语言中我们想要表达一个数据就要什么一个变量,但是每个变量又都有类型,但是如果我们想表达一个比较复杂的值。我们该怎么办呢?看下面一个例子:
#include
int main(int argc,char const *argv[])
{
struct date {
int month;
int day;
int year;
};
struct date today;
today.month = 04;
today.day = 23;
today.year = 2022;
printf("Today's date is %i-%i-%i.\n",
today .year,today.month,today.day);
return 0;
}
运行结果:
在上面的代码中我们实现了复杂值的表达那么它用到了我们C语言当中的结构。
形式1:
struct point {
int x;
int y;
};
struct point pl, p2;
pl和p2都是point里面有x和y的值
形式2:
struct {
int x;
int y;
} pl,p2;
pl和p2都是一种无名结构,里面有x和y
形式3:
struct point {
int x;
int y;
} pl,p2;
pl和p2都是point里面有x和y的值t
注意:
对于第一和第三种形式,都声明了结构point。但是第二种形式没有声明point,只是定义了两个变量
在一开始的例子中我们的结构是声明在函数里的那么它和本地变量一样,在函数内部声明的结构类型只能在函数内部使用。
那如果我们在函数外部生命呢?
看一下:
#include
struct date {
int month;
int day;
int year;
};
int main(int argc,char const *argv[])
{
struct date today;
today.month = 04;
today.day = 23;
today.year = 2022;
printf("Today's date is %i-%i-%i.\n",
today .year,today.month,today.day);
return 0;
}
运行结果:
我们可以看到我们在函数外部声明结构依然可以使用,所以通常在函数外部声明结构类型,这样就可以被更多的函数所使用了。
方式1:
#include
struct date {
int month;
int day;
int year;
};
int main(int argc,char const *argv[])
{
struct date today = {07,31,2014};
printf("Today's date is %i-%i-%i.\n",
today .year,today.month,today.day);
return 0;
}
方式2:
#include
struct date {
int month;
int day;
int year;
};
int main(int argc,char const *argv[])
{
struct date thismonth = {.month=7 , .year=2014};
printf("This month is %i-%i-%i.\n",
thismonth.year,thismonth.month,thismonth.day);
return 0;
}
结构成员
-
结构和数组有点像
-
数组用运算符和下标访问其成员
a[0]= 10;
-
结构用
.
运算符和名字访问其成员today.day
student.firstName
pl.x
pl.y
- 要访问整个结构,直接用结构变量的名字
- 对于整个结构,可以做赋值、取地址,也可以传递给函数参数
pl = (struct point){5,10};//相当于pl.x = 5;pl.y = 10;
pl = p2;//相当于pl.x = p2.x; pl.y = p2.y;
结构指针
- 和数组不同,结构变量的名字并不是结构变量的地址,必须使用&运算符
struct date *pDate = &today;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)