C语言---结构体

一、struct

定义结构体类型的一般形式:

struct   结构体类型名

{

       成员表列

} ;

struct :是关键字,作为结构体数据类型的标志,

结构体类型名:紧跟在struct后面 ,用户自行定义

成员列表:说明结构体所包含的成员及其数据类型

{ }外的;不能省略:类型说明的终止

1、结构体是自定义数据类型,定义完成后等同于内置类型。

例:

#include <string.h>
#include <stdlib.h>
struct student
{
	char name[20];
	int age;
};

int main()
{
	struct student stu1 = { "xiaowang", 19 };
	printf("%s %d\n", stu1.name, stu1.age);
	return 0;
}

运行结果为:

2、结构体不能定义一个自身成员变量,但可以定义一个指向自身的指针。

例:

struct AA
{
   int b;
};
struct A 
{
   int a;
   int AA b;//此处合法,因为上面定义了。若没有定义就不合法。
   struct *p;//合法,4个字节。
   struct A c//不合法,因为无法确定c的内存大小,不能分配内存空间。
};

3、构体普通变量通过"."访问它的成员;结构体指针变量通过"->"访问它的成员

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student
{
	char name[20];
	int age;
};
void show(const  struct student *pstu)
{
	printf("name:%s\nage:%d\n\n",pstu->name,pstu->age);
	//pstu->age = 0;//error
}
int main()
{
        struct student stu1;//stu1的age和name为随机值;
        printf("stu1\n");
        show(&stu1);

        struct student stu2={"zhangfei"};//stu2的age为0,因为聚合类型只初始化一部分,剩余部分为0;
        printf("stu2\n");
        show(&stu2);

        struct student stu3={"xiaowang", 19 };
        printf("stu3\n");
        show(&stu3);

        strcpy(stu3.name, "liming");//对字符串类型要用字符拷贝来修改
        stu3.age = 20;//构体普通变量通过“ .’ 运算符来修改;
        printf("修改后的stu3\n:");
        show(&stu3);

        struct student *p=&stu2;//指针p保存stu2的地址
        strcpy(p->name,"wanghong");//或strcpy((*p).name,"wanghong"),修改stu2的name,要用”->“运算符来修改;
        p->age=30;//结构体指针变量通过"->"访问它的成员
        printf("修改后的stu2\n:");
        show(&stu2);	
}

运行结果为:

二、typedef

typedef   数据类型  新的数据类型:给类型起别名;

typedef unsigned long long int unit64//给unsigned long long起了一个别名叫unit64

typedef unsigned long  int unit32//给unsigned long起了一个别名叫unit32

unit64 a;//a的数据类型为unsigned long long  int

unit32 b;//b的数据类型为unsigned long  int

typedef int * Pint;//数据类型

区分:

Pint i,j;//  i,j的数据类型为int * 

# define PINT int *;//宏是替换

PINT x,y;//x的数据类型为int *,y的数据类型为int.

1、识别typedef:(1)删除typedef,查看变量类型;(2)加上typedef,该变量提升为该数据类型。

例:

typedf int Arr[10];

Arr a;//定义了一个int型数组长度为10的数组,数组名为a;

typedef  int (*p)(int,int);

P b;//定义了一个变量b ,返回值为int型函数为两个int型的参数的函数指针;

2、用typedef给结构体类型起别名

好处在使用结构体时可以简写,还可以避免写错。

例:

struct student 

{

       char name[20];

       int age;

};

struct student stu;

用typedef给结构体类型起别名:

typedef struct student  student;

student stu;

C++中通常使用的方法:

typedef struct student

{

       char name[20];

       int age;

}student;

student stu;

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值