结构体,你好!

一、定义
结构体:称为自定义数据类型
定义格式:struct 类型名
另外我们要明白:
1、自定义数据类型定义完成以后等同于内置类型
2.结构体不能定义一个自身的普通成员变量,但可以定义一个指向自身的指针变量
struct Student  
{  
    char name[20];  
    int age;  
};  
Struct A  
{  
    int a;  
    short b;  
    double c; 
    struct Student d;//ok  
    struct B e;//error  由于程序的编译是顺序的,此时struct B还未定义  
    struct A f;//error  
    //结构体不能定义一个自身的普通成员变量(无法为其分配内存空间)  
    struct A *p;//ok  
    //但可以定义一个指向自身的指针变量(指针所占的内存为4字节)  
};  
struct B  
{  
    int i;  
    char j;  
    struct A k;//ok  因为前面A定义过了 
};  


二、初始化及成员的访问
1.结构体普通变量通过“.”号来访问其成员
2.结构体指针通过“->”访问其成员
int main()  
{  
    void Show();  
    struct Student stu1;   //它的输出是随机值  
    struct Student stu2={"liubeu",20};  
    struct Student stu3={"suquan"};  //由于结构体是聚合类型,则当只初始化一部分时,剩余部分默认值为0.在此处age=0  
    stu3.age = 30;  
    strcpy(stu3.name,"zhangfei");//此处用字符串拷贝函数对其进行修改  
    struct Student *pstu = &stu2;  
    *pstu.age = 35;//error("."的优先级高于"*",但在这里应该先对pstu进行解引用后在进行"."操作)  
    (*pstu).age = 35;//ok 等同于  pstu -> age = 35; 
    strcpy(pstu->name,"zhangfei");  
    Show(&stu2);  
}  
void Show(const struct Student *pstu)  //结构体的打印函数。  
{  
    printf("%s,%d\n",pstu->name,pstu->age);  
} 

三、简单化结构体——typedef
1.typedef的使用
typedef unsigned long long int uint64; //无符号长整型8字节64位 可以简写为uint64
typedef int * Pint;//定义一个整型指针的数据类型Pint  
typedef int arr[10];//定义一个长度为10的整型数组的数据类型Arr  
typedef int(*pfun)(int,int);//函数指针的数据类型 

2.typedef重新定义结构体
typedef struct student 
{  
   char a;  
   int b;  
}student; 

3.typedef与宏定义的比较
typedef int*  Pint;//<类型定义>  
# define  Pint  int*//<字符替换>  
Pint i,j;//i,j,都是int *
PINT x,y;//在这里x为int *,y为int类型 
对其理解:
首先是去掉typedef,查看定义的变量类型,然后再加上typedef,就由该类型变量变成为这种数据类型

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试