C语言结构体初始化和结构体指针

结构体初始化


#include <stdio.h>
//结构体的声明和定义方法
//1.声明和定义分离
struct weapon{
    char name[20];
    int atk;
    int price;
}; //声明
//定义
struct weapon weapon_1; 
//====================================
//
//2.同时进行声明和定义,只适用于简单的程序
struct weapon
{
    char name[20];
    int atk;
    int price;
}weapon_1;

结构体的访问


#include <stdio.h>


//结构体的声明
struct weapon{
    char name[20];
    int atk;
    int price;
};


int main()
{
    //结构体的初始化
    struct weapon weapon_1 = {"weapon_name",100,200};


    //结构体的访问
    //weapon_1.name
    printf("%s,%d\n",weapon_1.name,weapon_1.price);


    //结构体数组,数组元素是结构体
    //定义一个结构体数组
    //struct weapon weapon_2[2]={"weapon_name1",50,100,"weapon_name2",100,200};
    //printf("%s,%d\n",weapon_2[0].name,weapon_2[1].atk);//访问结构体数组索引0的name,索引1的atk
    //或
    //建议使用这种方式,更直观
    struct weapon weapon_2[2]={{"weapon_name1",50,100},{"weapon_name2",100,200}};


    printf("%s,%d\n",weapon_2[0].name,weapon_2[1].atk);//访问结构体数组索引0的name,索引1的atk
    return 0;
}

结构体指针


#include <stdio.h>


//结构体的声明
struct weapon{
    char name[20];
    int atk;
    int price;
};


int main()
{
    //结构体的初始化
    struct weapon weapon_1 = {"weapon_name",100,200};
    //结构体指针
    struct weapon * w;// w是指向struct weapon 类型的指针
    w = &weapon_1;// w 指向weapon_1
    //1.(*w).name // 括号不能省,因为.的优先级比()的优先级高
    //2.w->name // 结构体中C语言允许使用指向运算符->
    printf("%s,%s\n",(*w).name,w->name);//两种方式等价




    struct weapon weapon_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}};;
    struct weapon * p;
    p = weapon_2;//p存放weapon_2中第一个结构体的地址,p->name与weapon_2[0].name等价
    printf("%s\n",p->name);
    p++;//p指向weapon_2第二个结构体,等价于weapon_2+1,weapon_2[1]
    printf("%s\n",p->name);
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuzp111/article/details/53791937

猜你喜欢

转载自blog.csdn.net/hk121/article/details/80839452