1。结构的存储分配

1
2
printf("%d \n",sizeof(char));
printf("%d \n",sizeof(int));

int 类型为4B char 为1B

1
2
3
4
5
6
7
struct sa
    {
        char a;
        int  b;
        char c;
 
    };

1
2
3
4
5
6
7
8
struct sa
    {
        char c;
        char b;
        int a;
 
    };
struct sa ssa;

1
printf("%d \n",offsetof(struct sa,a));

结构体存储时要注意

要满足字对齐,起始地址为四的倍数,结束为止为4 的倍数。

1
2
3
4
5
6
7
8
9
10
11
12
13
struct sa
    {
        char a;
        char b;
      double e;
        int d;
 
    };
struct sa ssa;
printf("%d \n",offsetof(struct sa,a));
printf("%d \n",offsetof(struct sa,b));
printf("%d \n",offsetof(struct sa,e));
printf("%d \n",offsetof(struct sa,d));

2.结构体作函数的参数

部分值传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
struct sa
    {
        char a;
        char b;
      double e;
        int d;
 
    };
 
char saf(struct sa ssa)
{
    return ssa.a+ssa.b;
}
 
int main()
{
char ra;
struct sa ssa={1,2,1.1,4};
ra=saf(ssa);
printf("%d \n",ra);
 
}

引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
struct sa
    {
        char a;
        char b;
      double e;
        int d;
 
    };
 
void saf(struct sa *ssa)
{
ssa->a=ssa->a+ssa->b;
}
 
int main()
{
struct sa saa={1,2,1.1,4},*ssa;
ssa=&saa;
saf(ssa);
printf("%d \n",ssa->a);
 
}

3位段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
struct sa
    {
        unsigned a  :1;
        unsigned b  :2;
        signed e    :2;
        signed d    :2;
    };
 
int main()
{
struct sa saa={1,2,3,4},*ssa;
printf("%d \n",sizeof(struct sa));
printf("%d \n",saa.d);
 
}

d占2Bit,给d赋值 4溢出 ,为00,有符号数 结果为0,

给d 赋值 3 溢出,为11,有符号数,结果为-1;

位段的功能均可由移位和屏蔽实现。

c 函数及指针学习 7的更多相关文章

  1. C函数及指针学习1

    1 大段程序注释的方法 #if 0#endif 2三字母词 以两个问号 开始的都要注意 3 字面值(常量) 在整型号字面值后加 字符L (long),U(unsigned)说明字符常量 为长整型 或( ...

  2. c 函数及指针学习 10

    标准库函数 1算数运算stdlib.h 2随机数stdlib.h 3字符串转化stdlib.h 4数学函数 math.h 5日期和时间 time.h 6信号 signal.h 7打印可变参数列表std ...

  3. c 函数及指针学习 9

    指针的高级应用 处理命令行参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h>   int main(int ar ...

  4. c 函数及指针学习 5

    聚合数据类型 能够同时存储超过一个的单独数据. c语言提供了数组和结构体. 1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> # ...

  5. c 函数及指针学习 4

    1数组和指针声明的差别 声明数组:为数组分配内存,为数组名分配内存(指针常量 4个字节) 指针:为指针分配内存(指针变量 4个字节) 1 2 3 4 5 6 7 8 9 10 #include < ...

  6. c 函数及指针学习 3

    strlen(x) 返回 size_t 类型,size_t是 unsigned int 类型,所以 strlen(x)-strlen(y) 返回 unsigned int 始终 >=0 1 2 ...

  7. C函数及指针学习2

    1.break  永久终止循环,continue 结束当前循环 2.switch 每个case标签要有唯一值,(且为常量或常量表达式) 不加break 时执行流会贯穿整个case 标签 3 赋值操作符 ...

  8. c 函数及指针学习 8

    联合体 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h>   union sa     {     double a;     int b; ...

  9. c 函数及指针学习 6

    不完整声明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 /* 方法一   */ struct tag_a{ ...

随机推荐

  1. 数据结构-AVL树

    实现: #ifndef AVL_TREE_H #define AVL_TREE_H #include "dsexceptions.h" #include <iostream& ...

  2. C++-多重继承的注意点

    1, 钻石型多重继承如果不想要底部的类有重复的变量,则需要声明为virtual继承 class File{...}; class InputFile: virtual public File{..}; ...

  3. 测试V模型

    一:测试V模型 RAD(Rap Application Development 快速引用开发)模型是软件开发过程中的一个重要模型,由于模型构图形似字母V,所以又称软件开发的V模型.他通过开发和测试同时 ...

  4. 加强版for循环

    /*加强版for循环 * 5.0以后有加强版for循环 * for(String name:nameArray){} * 1.String name:声明会带有数组单一元素的循环变量 *   数组元素 ...

  5. SharePoint 2010 BCS - 简单实例(一)数据源添加

    博客地址 http://blog.csdn.net/foxdave 本篇基于SharePoint 2010 Foundation. 我的数据库中有一个病人信息表Patient,现在我就想把这个表中的数 ...

  6. ODI中的临时接口

    在ODI 11g及后续的版本中,针对复杂的ETL处理,可分解为多个步骤,在中间步骤中使用临时接口,而不用建立相应的物理表,ODI会在处理过程中自动创建和删除这些中间表,从而降低ETL处理复杂度:同时, ...

  7. sql 之CONCAT用法

    这是java交流群里一个网友面试的时候发过来的笔试题,我觉得题目的假定条件应该是某个字母对应的最小数字只有一个. 思路第一步是查出一个子表s1: select name,min(number) fro ...

  8. java,android获取系统当前时间

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss ");Date curDate = ...

  9. About View

    View Geometry Frame & Bounds Graphically, a view can be regarded as a framed canvas. The frame l ...

  10. WebGis应用开发框架

    转自:http://www.cnblogs.com/zitsing/archive/2012/03/02/2377083.html 前言 Web Gis顾名思义就是通过浏览器方式操作的地理系统.通过浏 ...