`

struct结构定义的几种方式,和初始化及typedef用法

阅读更多
#include <stdio.h>
/**
一般定义形式

*/
    struct student{
    char *name;
    int age;
    double score;
}
define1(){
    struct student stu;
    stu.name="hello";
    stu.age=20;
    printf("student name%s\n",stu.name);   //hello
    printf("student age %d\n",stu.age); //20
}
/**
    在定义时给出结构变量名
*/
struct people{
     char *username;
     int age;
}body;
define2(){
     body.username="flex";
     body.age="nihao";
     printf("people.name %s\n",body.username);//flex
     printf("people.age %s\n",body.age);     //age;

}
/**
    匿名结构,光给出结构变量名,没有给定结构名
*/
struct {
    int age;
}teacher,stu;
define3(){
    teacher.age=20;
    stu.age=30;
    printf("teacher.age %d \n stu.age %d \n",teacher.age,stu.age); //20 30
}
/**
 使用宏定义
*/
#define UT struct cat
UT{
     char * carName;
}
define4(){
    UT a;
    //cat st;    //不可以这样定义
    //ct.carName="my first cat";
    a.carName="my cat";
   // printf("my first car%s\n",ct.carName);
    printf("my cat%s  ",a.carName);// my cat
    

}
struct initMember{
    int st;
    int h;
}member={2,3},member1;

initDefine(){
    printf("\nmember init %d,",member.st);//2
    member1=member;
    printf("member1.st %d\n + member1.h %d\n",member1.st,member1.h);//2,3
}
struct sarray{
    int a,b;
}str[3],sarr[2]={
        {1,2},
        {3,8},
        };
structArray(){
    struct sarray sp[2];
    int i;
    sp[0].a=1;
    sp[1].a=2;
    sp[0].b=0;
    sp[1].b=4;

    for(i=0;i<2;i++){
        printf("sp %d 的a %d\n",i,sp[i].a);   //8
    }
    
    str[0].a=5;
    printf("array[0].a=%d",str[0].a);//5
    
    printf("\nsarr[1].b=%d\n",sarr[1].b);
}
struct structPoint{
    char c;
}sp={'a'};
structPoint(){
    /*
其访问的一般形式为:

    (*结构指针变量).成员名

   或为:

        结构指针变量->成员名*/


    struct structPoint *p=&sp;
    printf("结构指针的指向的值是%c\n",(*p).c);
    printf("结构指针访问值的第2种方式%c\n",p->c);
}

//typedef 是给类型起别名,那么还可以给struct起别名
typedef int Integer;
typedefsample(){
    Integer a=2;
    printf("typdef int a=%\d",a);
}
//typedef一个结构
typedef struct TestTypeDefStruct{
    char *p;
} DEFSTRUCT;
typedefStruct(){
    DEFSTRUCT ttds;
    ttds.p="typedef define a struct";
    printf("typedef 定义一个结构%s\n",ttds.p);
}



//typedef demo De;

/*
demo2(){
    De sp;
    sp.a=2;
}*/
int main(int args,char* arg0){
     //定义的4种方式
     define1();
     define2();
     define3();
     define4();
     initDefine();//结构变量的初始化
     structArray();//结构数组的定义
     structPoint();//指向结构变量的指针, struct 结构名 *结构指针变量名
     typedefsample();//typedef定义一个整形
     typedefStruct();
    // demo();

}

 

分享到:
评论

相关推荐

    你必须知道的495个C语言问题

    第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的...

    《你必须知道的495个C语言问题》

    ~第1章 声明和初始化 1 基本类型 1 1.1 我该如何决定使用哪种整数类型? 1  1.2 为什么不精确定义标准类型的大小? 2 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后...

    c++ 面试题 总结

    系统会初始化static int变量为0,但该值会一直保存,所谓的不可重入... -------------------------------------------------------------------------- 13.写出运行结果: {// test1 char str[] = "world"; cout (str...

    C语言FAQ 常见问题列表

    o 2.14 我总算弄清除函数指针的声明方法了, 但怎样才能初始化呢? * 3. 结构、联合和枚举 o 3.1 声明 struct x1 { ...}; 和 typedef struct { ...} x2; 有什么不同? o 3.2 为什么 struct x { ...}; x ...

    C语言入门经典(第4版)--源代码及课后练习答案

    11.1 数据结构:使用struct 403 11.1.1 定义结构类型和结构变量 405 11.1.2 访问结构成员 405 11.1.3 未命名的结构 408 11.1.4 结构数组 408 11.1.5 表达式中的结构 411 11.1.6 结构指针 411 11.1.7 为结构...

    一些C面试题,希望能对大家有帮助

    这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好。3.在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么? 函数名: atol 功能: 把字符串转换成长整型数 用法: ...

    《数据结构 1800题》

    2. 数据元素之间的关系在计算机中有几种表示方法?各有什么特点?【燕山大学1999 二、2(4分)】 3. 数据类型和抽象数据类型是如何定义的。二者有何相同和不同之处,抽象数据类型的主要特点是什么? 使用抽象数据...

    你必须知道的495个C语言问题(PDF)

    1 声明和初始化1 1.1 我如何决定使用那种整数类型? . . . . . . . . . . . . . . . . . . . 1 1.2 64 位机上的64 位类型是什么样的? . . . . . . . . . . . . . . . . 1 1.3 怎样定义和声明全局变量和函数最好? ....

    windows编程资料大全

    IdleUIInit()是环境初始化函数,IdleUITerm()是环境清理函数,分别在MFC应用程序的InitInstance() 和 ExitInstance()中调用它们。当用IdleUIInit()做完初始化后,就可以调用第三个函数IdleUIGetLastInputTime()来...

    uboott移植实验手册及技术文档

    了解 U-Boot-1.3.1 的代码结构,掌握其移植方法。 【实验环境】 1、Ubuntu 7.0.4发行版 2、u-boot-1.3.1 3、FS2410平台 4、交叉编译器 arm-softfloat-linux-gnu-gcc-3.4.5 【实验步骤】 一、建立自己的平台...

    华为编程开发规范与案例

    1、变量/指针在使用前就必须初始化 第5页 【案例1.1.1】 第5页 2、防止指针/数组操作越界 第5页 【案例1.2.1】 第5页 【案例1.2.2】 第6页 【案例1.2.3】 第7页 【案例1.2.4】 第8页 3、避免指针的非法引用 第9页 ...

    二叉排序树与平衡二叉树的实现

    使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。 使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。 3) 使...

    语言程序设计课后习题答案

    面向对象方法所强调的基本原则,就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常...

    MFC的程序框架剖析

    类的集合,是一套面向对象的函数库,以类的方式提供给用户使用 2、MFC AppWizard是一个辅助我们生成源代码的向导工具,它可以帮助我们自动生成基于MFC框架的源代码 二、基于MFC的程序框架剖析 1、MFC程序的ClassView...

Global site tag (gtag.js) - Google Analytics