`
pengc825
  • 浏览: 8596 次
文章分类
社区版块
存档分类
最新评论

C 结构体的用法总结

 
阅读更多

C 结构体的用法总结

基本定义:结构体,通俗讲就像是打包封装,把一些变量有共同特征(比如同属于某一类事物的属性)的变量封装在内部,通过一定方法访问修改内部变量。

结构体定义:

第一种:只有结构体定义:
struct stuff {
    char job[100];
    int age;
    float height;
};
第二种:附加变量初始化的结构体定义:
struct stuff {
    char job[100];
    int age;
    float height;
}Pengc;
第三种:只用一次的结构体定义:
struct {
    char job[100];
    int age;
    float height;
}Pengc1,Pengc2;

结构体变量及其内部成员变量的定义及访问:

就像刚才的第二种提到的,结构体变量的声明可以用:

struct stuff yourname;  

其成员变量的定义可以随声明进行:

struct stuff Huqinwei = {"manager",30,185};  

也可以考虑结构体之间的赋值:

struct stuff faker = Huqinwei;  

如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)

Huqinwei.job[0] = 'M';  
Huqinwei.job[1] = 'a';  
Huqinwei.age = 27;  
Huqinwei.height = 185; 

构体成员变量的访问除了可以借助符号".",还可以用"->"访问(下边会提)。

指针和数组:

这是永远绕不开的话题,首先是引用:

struct stuff *ref = &Huqinwei;  
ref->age = 100;  
printf("age is:%d\n",Huqinwei.age); 

指针也是一样的:

struct stuff *ptr;  
ptr->age = 200;  
printf("age is:%d\n",Huqinwei.age);  

结构体也不能免俗,必须有数组:

struct test {
    int a[3];
    int b;
};
//对于数组和变量同时存在的情况,有如下定义方法:
struct test student[3] =      {{{66, 77, 55}, 0},
    {{44, 65, 33}, 0},
    {{46, 99, 77}, 0}
};
//特别的,可以简化成:
struct test student[3] =       {{66, 77, 55, 0},
    {44, 65, 33, 0},
    {46, 99, 77, 0}
};

结构体嵌套:

结构体嵌套其实没有太意外的东西,只要遵循一定规律即可:

//对于“一锤子买卖”,其中A、B可删,不过最好带着
struct A {
    struct B {
        int c;
    };
    b;
};
a;
//使用如下方式访问:
a.b.c = 10;

特别的,可以一边定义结构体B,一边就使用上:

struct A {
    struct B {
        int c;
    } b;

    struct B sb;

} a;

使用方法与测试:

a.b.c = 11;
printf("%d\n", a.b.c);
a.sb.c = 22;
printf("%d\n", a.sb.c);

结构体与函数:

关于传参,首先:

void func(int);  
func(a.b.c);  

把结构体中的int成员变量当做和普通int变量一样的东西来使用,是不用脑子就想到的一种方法。 另外两种就是传递副本和指针了 :

//struct A定义同上
//设立了两个函数,分别传递struct A结构体和其指针。
void func1(struct A a) {
    printf("%d\n", a.b.c);
}
void func2(struct A* a) {
    printf("%d\n", a->b.c);
}
main() {
    a.b.c = 112;
    struct A * pa;
    pa = &a;
    func1(a);
    func2(&a);
    func2(pa);
}

占用内存空间:

struct结构体,在结构体定义的时候不能申请内存空间,不过如果是结构体变量,声明的时候就可以分配——两者关系就像C++的类与对象,对象才分配内存(不过严格讲,作为代码段,结构体定义部分“.text”真的就不占空间了么?)。

结构体的大小是结构体所含变量大小的总和,并且不能用"char a[]"这种弹性(flexible)变量,必须明确大小,下面打印输出上述结构体的size:

printf("size of struct man:%d\n",sizeof(struct man));  
printf("size:%d\n",sizeof(Huqinwei));
// 结果毫无悬念,都是28:分别是char数组20,int变量4,浮点变量4.   

和C++的类不一样,结构体不可以给结构体内部变量初始化,。 如下,为错误示范:

#include<stdio.h>
// 直接带变量名Huqinwei
struct stuff {
//      char job[20] = "Programmer";
//      char job[];
//      int age = 27;
//      float height = 185;
} Huqinwei;

版权声明:本文为博主原创文章,未经博主允许不得转载。By PengCoX ( Pengc825@foxmail.com )

分享到:
评论

相关推荐

    C语言程序设计(PDF格式)

    2.6.7 关于优先级的小结 27 2.7 表达式 28 2.7.1 表达式中的类型转换 28 2.7.2 构成符cast 29 2.7.3 空格与括号 29 2.7.4 C语言中的简写形式 29 第3章 程序控制语句 31 3.1 程序的三种基本结构 31 3.2 数据的输入与...

    C语言程序设计+研究生复试+求职+面试题

    汇总了计算机研究生复试有关C语言程序设计各章节简答题,使用了易于口头表达的语言进行了总结。包括C语言程序设计基本概念及各章节问题回答。可供研究生复试或相关专业岗位面试使用。如: 简述C语⾔采取了哪些措施提...

    23道常见的C语言面试题

    文档内容涵盖了const关键字的使用、指针常量与常量指针的区别、static关键字的作用、全局变量与局部变量的区分、宏定义的作用、内存对齐的概念、inline内联函数的特点、C语言实现面向对象特性的方法、memcpy函数的...

    C语言程序设计(高清PDF)

    2.6.7 关于优先级的小结 27 2.7 表达式 28 2.7.1 表达式中的类型转换 28 2.7.2 构成符cast 29 2.7.3 空格与括号 29 2.7.4 C语言中的简写形式 29 第3章 程序控制语句 31 3.1 程序的三种基本结构 31 3.2 数据的输入与...

    C程序设计 第四版 谭浩强 高清扫描版 带完整书签目录 加 学习辅导

    7.9.4 存储类别小结 7.10 关于变量的声明和定义 7.11 内部函数和外部函数 7.11.1 内部函数 7.11.2 外部函数 习题 第8章 善于利用指针 8.1 指针是什么 8.2 指针变量 8.2.1 使用指针变量的例子 8.2.2 怎样定义指针变量...

    明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】

    访问数组(数组的使用方法) 123 数组的遍历 124 数组初始化 126 数组的复制 127 输入数组元素的值 129 对数组的元素进行倒序排列 129 使用数组进行成绩处理 131 对象式宏 131 数组元素的最大值和最小值 ...

    《C语言程序设计》-PDF格式

    2.6.7 关于优先级的小结 27 2.7 表达式 28 2.7.1 表达式中的类型转换 28 2.7.2 构成符cast 29 2.7.3 空格与括号 29 2.7.4 C语言中的简写形式 29 第3章 程序控制语句 31 3.1 程序的三种基本结构 31 3.2 数据的输入与...

    谭浩强c语言程序设计

    3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...

    C语言程序设计(谭浩强)第三版

     7.9.4存储类别小结  7.10关于变量的声明和定义  7.11内部函数和外部函数  7.11.1内部函数  7.11.2外部函数  习题 第8章;善于利用指针 8.1指针是什么  8.2指针变量 8.2.1使用指针变量的例子  8.2.2怎样定义...

    谭浩强 C语言程序设计 教程全书 Word版

    3.5.4 字符数据在内存中的存储形式及使用方法 10 3.5.5 字符串常量 11 3.5.6 符号常量 12 3.6 变量赋初值 12 3.7 各类数值型数据之间的混合运算 13 3.8 算术运算符和算术表达式 14 3.8.1 C运算符简介 14 3.8.2 算术...

    谭浩强版c语言程序设计

    3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...

    C语言进阶 作者 Wrestle.Wu

    本书是一本修炼C程序设计能力的进阶之作,它没有系统地去讲解C语言的语法和编程方法,而是只对C语言中不容易被初学者理解的重点、难点和疑点进行了细致而深入的解读,揭露了C语言中那些鲜为普通开发者所知的秘密,...

    《C语言程序设计》谭浩强

    3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...

    C语言进阶-牟海军.pdf

    本书是一本修炼C程序设计能力的进阶之作,它没有系统地去讲解C语言的语法和编程方法,而是只对C语言中不容易被初学者理解的重点、难点和疑点进行了细致而深入的解读,揭露了C语言中那些鲜为普通开发者所知的秘密,...

    c语言课程设计报告通讯录管理系统.doc

    通过变量i使结 构体数组之间达成数据链表的功能,利用该方法主要考虑到成员中对于结构体指针尚未 熟练掌握,而这种方法更加便捷易懂。 子函数功能介绍 1. 添加:输入成员信息,依次输入编号、姓名、QQ、电话号码、...

    C语言程序设计.rar

    2.6.7 关于优先级的小结 27 2.7 表达式 28 2.7.1 表达式中的类型转换 28 2.7.2 构成符cast 29 2.7.3 空格与括号 29 2.7.4 C语言中的简写形式 29 第3章 程序控制语句 31 3.1 程序的三种基本结构 31 3.2 数据的输入与...

    新概念C语言.李一波(带详细书签).pdf

    18.3.8 存储类别小结 199 18.4 编译预处理 201 18.4.1 宏替换 201 18.4.2 文件包括 204 18.4.3 条件编译(选讲内容) 204 18.5 如何运行一个多文件的程序 207 习题 208 第19章 C++对C的扩充 211 19.1 C++的...

    c语言程序设计(第三版)

    3.5.4 字符数据在内存中的存储形式及使用方法 10 3.5.5 字符串常量 11 3.5.6 符号常量 12 3.6 变量赋初值 12 3.7 各类数值型数据之间的混合运算 13 3.8 算术运算符和算术表达式 14 3.8.1 C运算符简介 14 3.8.2 算术...

    c语言(编写程序最佳参考资料)

    3.5.4 字符数据在内存中的存储形式及使用方法... 10 3.5.5 字符串常量... 11 3.5.6 符号常量... 12 3.6 变量赋初值... 12 3.7 各类数值型数据之间的混合运算... 13 3.8 算术运算符和算术表达式... 14 3.8.1 C...

    谭浩强c语言word版

    3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...

Global site tag (gtag.js) - Google Analytics