结构体小知识课堂

xiaoxiao2021-02-28  54

结构体又称自定义数据类型,可表示为

struct +类型名

例如我们需要统计一个学生的姓名、年龄等信息这个时候我们就需要用到结构体:

struct Student

{

char name[20];

int age;

};

//自定义数据类型,定义完成以后,等同于内置类型   这句话如何理解呢我们看下面代码

int main() { int a; int b; int arr[45]; struct Student stu1; struct Student brr[5]; struct Student *p1; return 0;

} 在这里呢,我们引用上边的语句块,struct Student stu1; struct Student brr[5];struct Student *p1;这三句代码作用就相当于是内置类型,这样并不会出现语法错误,我们可以当做内置类型来使用

在看下边代码:

struct A { int a; char b; short c; double d; //struct B f;//error这句代码错误是因为语句从上至下执行struct B并没有定义,不知道给他分配多少字节,所以无法使用未定义的类型 //struct A g;//error,结构体不能定义一个自身的普通成员变量, int i; struct A *p;//ok而这句编译后并没有错误是因为,指针就是四个字节,是确定的,所以这句合法

};

 

还是上边的例子,如果给出在填充学生信息时,年龄漏填,我们需要进行补充,则可以通过“.”来访问它的成员:

int main()

{ struct Student stu1; struct Student stu2 = {"liubei",25}; struct Student stu3 = {"caocao"};

stu3.age = 30;

//stu3.name = "sunquan";//error strcpy(stu3.name,"sunquan"); struct Student *pstu = &stu2; //int *p = &a; //(*pstu).age = 35; pstu->age = 35;

return 0;

}

那么问题来了,要是定义的是一个指针变量我们如何来修改它的值呢?前边介绍过,子函数要想改变父函数的值必须进行传指针解引用

 

int main()

{ struct Student stu1; struct Student stu2 = {"liubei",25}; struct Student stu3 = {"caocao"};

stu3.age = 30;

        struct Student *pstu = &stu2;

int *p = &a; (*pstu).age = 35;

return 0;

}

在这里呢我们一般会忽略优先级,一般会写成*pstu.age = 35;这种形式,人都会犯错误,于是开发者用一种新的写法解决这个问题 :pstu->age = 35; 就是用一个指向符号。多方便,(有两个自带*的符号“ -> ”和“[]”

为了加深理解看下一段代码:

struct B { int c; int *d; struct A e; }; int main() { struct B aa; struct B *bb = &aa; return 0;

}

通过aa,*bb来访问他们的成员,应为

        aa.c; aa.d; aa.e.a; aa.e.b; bb->c; bb->d; bb->e.a; bb->e.b;

总结一下就是:1.结构体定义完成后就等同于内置类型

2.结构体不能定义一个自身的普通成员,但可以定义一个指向自身的指针

3.结构体普通变量可以通过“.”来访问它的成员

4.结构体指针变量通过“->”访问它的成员

 

 

 

转载请注明原文地址: https://www.6miu.com/read-2627419.html

最新回复(0)