C语言基础(L6-L7)

来源:互联网 发布:俄罗斯网络制式 编辑:程序博客网 时间:2024/04/28 07:49

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   1printf("%d\n",RED);   // 默认1   2printf("%d\n",BLUE);  // 默认2   3return 0}

typedef

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

0 0