结构体指针及应用

 结构体指针
//结构体变量和结构体指针必须是同一类型的
#include<stdio.h>
#pragma warning(disable:4996)   
//屏蔽4996这个警告
struct stu                       //定义一个结构体类型stu
{
    int num;       
//成员
    char name[20];
};
int main()
{
    struct stu boy = {101,"lilei"};    
//定义一个结构体变量并赋初值
    struct stu* p;       //定义一个指针变量p
    p = &boy;     //把boy的地址给p赋值
    printf("sizeof(p)=%lld\n",sizeof(p));      //看p占几个字节,在sizeof上,它返回的是一个64位          (8bytes)的无符号整型,所以占位符应该是%lld
 //通过各种方法去引用结构体变量的成员

下面是访问结构体变量成员的方法
    printf("boy.num=%d\n", boy.num);
    printf("(*p).num=%d\n", (*p).num);
//*p=boy,引用指针指向结构体的成员的方法,前提是指针必须指向一个结构体的变量
    printf("p->num=%d\n", p->num);
    return 0;
}

  扩展: 查资料占位符

%d在格式化输入输出中代表int(4bytes),

%ld代表long int(>=4bytes),

%lld代表long long int (8bytes);

结构体指针应用

1.保存  结构体变量的地址

#include<stdio.h>
#pragma warning(disable:4996)  
//屏蔽4996警告
typedef struct stu {
    int num;
    char name[10];
    float score;
}STU;         
//结构体新的类型名=struct stu
int main()
{
    STU* p, lucy;        
//定义一个结构体指针变量
    p = &lucy;             //把lucy的地址赋给p
    p->num = 101;
    strcpy(p->name, "baby");  
//把字符串拷到p指向的name的成员,
                                              //p->name不可直接赋值,因为它是字符数组的名字,是个常量
}
2.传  结构体变量的地址

#include<stdio.h>
#pragma warning(disable:4996)
//屏蔽4996警告
typedef struct stu {
    int num;
    char name[10];
    float score;
}STU;
void fun(STU* p)        
//因为fun没有返回值,所以用void
{
    p->num = 101;       
//给girl的num赋值
    strcpy(p->name, "baby");
    p->score = 88.6;
}
int main()
{
    STU girl;
    fun(&girl);    
//把girl的地址赋给fun的p
            //调用fun去改变主调函数girl的值,必须传变量的地址进去,通过地址找到变量然后去赋值
    printf("%d %s %f\n", girl.num,girl.name,girl.score);
    return 0;
}

结果如下:

3.传  结构体数组的地址
结构体数组,是由若干个相同类型的结构体变量构成的集合。存放在内存里,也有起始地址,其实就是第0个结构体变量的地址。

#include<stdio.h>
#pragma warning(disable:4996)
//屏蔽4996警告
typedef struct stu {
    int num;
    char name[10];
    float score;
}STU;
void fun(STU* p,int n)       
//因为fun没有返回值,所以用void
{
    int i;
    for (i = 0; i < n; i++)       
//用循环打印edu数组的内容
    {
        printf("%d %s %f\n", p[i].num, p[i].name, p[i].score);
//p[i]=edu[i]
    }
}
int main()
{

    //定义一个结构体数组
    STU edu[3] = {
    {111,"mi",99.9f},
    {110,"shi",95.0f},
    {109,"wen",90.3f}
    };
    fun(edu,3);  
//首地址,
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值