码迷,mamicode.com
首页 > 其他好文 > 详细

c 函数及指针学习 7

时间:2014-05-01 04:07:14      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:com   http   blog   style   class   div   img   code   c   log   t   

1。结构的存储分配

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

mamicode.com,码迷

int 类型为4B char 为1B


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

mamicode.com,码迷

mamicode.com,码迷

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

mamicode.com,码迷

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

mamicode.com,码迷

结构体存储时要注意

要满足字对齐,起始地址为四的倍数,结束为止为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));

mamicode.com,码迷

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,码迷,mamicode.com

c 函数及指针学习 7

标签:com   http   blog   style   class   div   img   code   c   log   t   

原文地址:http://www.cnblogs.com/chen-/p/3702112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!