C语言基础(L6-L7)

L6:struct AND union

struct

1.空结构体的大小?用gcc编译链接后 空结构体占用0个字节 ,出来一个问题 如果定义两个空结构体 则两个变量占用相同的地址空间。
如果用g++编译链接 执行 ->占用1个字节,两个变量占用不同的地址空间。
2.柔性数组:数组大小待定的数组(产生斐波那契数列)

#include <stdio.h>
#include <malloc.h>

typedef struct _soft_array
{
    int len;
    int array[];
}SoftArray;//sizeof(SoftArray) =4  //只有len有存储空间

SoftArray* create_soft_array(int size)
{
    SoftArray* ret = NULL;

    if( size > 0 )
    {
        ret = (SoftArray*)malloc(sizeof(*ret) + sizeof(*(ret->array)) * size);

        ret->len = size;
    }

    return ret;
}

void fac(SoftArray* sa)
{
    int i = 0;

    if( NULL != sa )
    {
        if( 1 == sa->len )
        {
           sa->array[0] = 1;
        }
        else 
        {
            sa->array[0] = 1;
            sa->array[1] = 1;

            for(i=2; i<sa->len; i++)
            {
                sa->array[i] = sa->array[i-1] + sa->array[i-2];
            }
        }
    } 
}

void delete_soft_array(SoftArray* sa)
{
    free(sa);
}

int main()
{
    int i = 0;
    SoftArray* sa = create_soft_array(10);

    fac(sa);

    for(i=0; i<sa->len; i++)
    {
        printf("%d\n", sa->array[i]);
    }

    delete_soft_array(sa);

    return 0;
}

union 只分配 最大域的空间,所有域共享该空间

注意是小端模式还是大端模式

L7:enum 及typedef

enum 用来定义常量

enum 是真正的常量,和#define定义的不同
只能用来定义int,只能去定义时的离散值

enum Color
{
    GREEN,
    RED =2,
    BLUE     //BLUE =3;
};
int main()
{
printf("%d\n",GREEN); // 默认0   1
printf("%d\n",RED);   // 默认1   2
printf("%d\n",BLUE);  // 默认2   3
return 0
}

typedef

1.用于给一个已经存在的数据类型重命名
2.并没有产生新的类型
3.typedef重定义的类型不能进行unsigned 和signed 扩展

猜你喜欢

转载自blog.csdn.net/shouzhoudd/article/details/45935731