结构体和数组

结构体变量的定义:在C语言中可以用结构体来定义不同的数据类型。简单来说,结构体就是用户自定义数据类型的集合体。例如,定义一个学生的结构体。

struct student
{
                char *name;  //姓名
                int num;  //学号
                int age;  //年龄
                char group;  //所在学习小组
                float score;  //成绩
};
                

在理论上说,结构体内的各个成员的内存是连续的。但是由于结构体的内存对齐,在编译器的具体实现中每个成员之间可能存在缝隙。所以实际上student结构体在内存中的存储是:4+4+4+1+4=20个字节。如下图:

namenumagegroupscore

其中编译器为了内存对齐在group和score之间补全了三个字节。

结构体的初始化

//方法1
struct student stud = {"ming",123,11,'A',66};

//方法2
stud = {
        .name  = "ming",
        .num   = 123,
        .age   = 11,
        .group = 'A',
        .score = 66};
//给指定的变量赋值
stud.name = "ming";
stud.age  = 11;

结构体和数组

结构体和普通的变量使用是一样的,但是结构体的名字表示的结构体变量本身,而数组名在表示的是数组首个元素的地址(某些情况除外,如sizeof)。

#include <stdio.h>
struct stu
{
    int number;
    char *name;

};//结构体定义
typedef struct stu stu_t;//给结构体取别名

void stuinfo(stu_t *stu)
{
    printf("student number is:%d\n",stu->number);
    printf("student name is:%s\n",stu->name);
}

void func(int *arr)
{
    for(int i=0;i<10;i++)
        printf("%d\t",*arr++);
}
int mian()
{
    stu_t stus={1,"hh"};
    stuinfo(&stus);//传入的是结构体的地址

    int arr[10]={0};//数组的定义初始化
    func(arr);//arr=&arr[0],表示arr首元素的地址,不需要&
}

输出结果:

student number is:1
student name is:hh
0	0	0	0	0	0	0	0	0	0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值