结构体与指针

结构体

是一种构造数据类型,将不同数据了类型结合起来成为自定义的数据类型

struct Man m = {"name",20};

// 只能在申明的时候赋值
m = {"age",20} XXX

几种写法:

1.申明结构体的时候预先定义了一个全局变量
struct Man{

    char* name;
    int age;
} m1,m2={"ch",20};

2.匿名结构体(控制结构体变量的个数,相当于单例)
struct {
    char * name;
    int age;
}m1,m2;

3.结构体嵌套
struct Teacher {
    char* name;
    int age;
};

struct student {
    char* name;
    int age;
    struct Teacher t;
}


//结构体与指针
struct Man{
    char* name;
    int age;
}

void main() {

    struct Man m1 = {"ch",20};
    struct Man* p = &m1;
    printf("%s",(*p).name);
    printf("%s",p->name);

    // 结构体数组的遍历 
    struct Man m2 = {{"jack",20},{"rose",19}};
    struct Man *p = m2;
    for(;p<m2+2;p++) {
        printf("%s",p->name);
    }

    int i = 0;
    for(;i<sizeof(m2)/sizeof(struct Man);i++) {
        printf("%s",m2[i].name);
    }

    // 动态分配结构体数组的遍历
    struct Man *p = (struct Man)malloc(sizeof(struct Man)*10);
    .....
    free(p);

}


注意:结构体变量的大小,必须是最大基本数据类型的整数倍,来提升读取的效率

别名:typedef

不同的别名,不同的实现(JNI中,C和C++有不同的写法)
方便代码可读性

//结构体函数指针
typedef struct Girl {
    char* name;
    int age;
    void(*hello)(char* hello);
}GirlType;
该结构体类似于java中的类,name,age代码属性,hello代表方法

// 结构体的指针别名
typedef struct Girl* Girlp;

void sayHello(char* text) {

    printf("%s",text);
}

void main() {

    GirlType girl;
    girl.name = "lucy";
    girl.age = 10;
    girl.hello = sayHello;
    // 调用
    girl.hello("helllo");

    Girlp p = &girl;
    p->helllo("Girlp");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值