c语言中结构体的定义、初始化及内存分配

#include <stdio.h>

struct person
{
    char *name;
    int age;
};

int main()
{
    
    //结构体可以定义在函数内,也可以定义到函数外
    //相当于全局变量与局部变量
    
//    struct person
//    {
//        char *name;
//        int age;
//    };
    
    struct person p1;
    
    //补齐算法,分配的存储空间为结构体中占用内存最大成员所占用内存的整数倍
    //person结构体中占用内存最大的成员为指针,占用8个字节,
    //另一个成员int占用4个内存,
    //所以结构体person所定义变量占用的内存为16字节
    printf("sizeof(p1)=%lu\n",sizeof(p1));
    
    p1.name = "jack";
    p1.age = 18;
    
    printf("p1.name = %s\n",p1.name);
    printf("p1.age = %d\n",p1.age);
    
    
    struct person p2 = {"rose",20};
    
    printf("p2.name = %s\n",p2.name);
    printf("p2.age = %d\n",p2.age);
    
    /*
     错误的赋值
     结构体只能在初始化的时候使用大括号的方式赋值
     这点跟数组类似,声明时p3已经分配内存地址,
     p3是地址常量,是不可以重新赋值的
     struct person p;
     p={"name",10};
     */
    
    return 0;
}

结果

sizeof(p1)=16
p1.name = jack
p1.age = 18
p2.name = rose
p2.age = 20