C语言笔记 -- 数组 结构体 名称与地址

本文详细探讨了C语言中字节的概念,指出1个字节等于8位,并通过例子展示了字节对齐的影响。接着讨论了结构体地址,解释了由于字节对齐,sizeof(struct sgo_down)等于24,sizeof(struct sgo_up)等于32。文章还提到了指针和指针的指针的区别,并强调了为指针赋值的重要性,以避免野指针问题。最后,简要提及了数组地址的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、字节

1个字节(Byte)= 8 位(bit);
举例
地址 数据
0x00000010 12345678 90abcdef 11223344 55667788
0x00000020 11223344 55667788 12345678 90abcdef

暂时不管大小端,假设地址0x10上的数据是0x12,即00010010,占8位,1个字节;0x11上的数据是0x34,占8位,1个字节…
所以,地址 0x10到0x18之间的数据有12345678 90abcdef,一共占8个字节。

注意:经常有字节对齐。64位默认8字节对齐,32位默认4字节对齐。
在下面的计算中就遇到了,本次测试是linux 64位。

二、结构体地址

struct sgo_down {
   
        int b;//4
        struct sgo_up *up;//8
        int c;//4
};

因为有8字节对齐,所以 sizeof(struct sgo_down) = 24

struct sgo_up {
   
        int a;//4
        struct sgo_down down;
};

同理:sizeof(struct sgo_up) = 32

void func1(struct sgo_up *up)
{
    
        struct sgo_down *test_down;
        test_down = &up->down;
    
        test_down->b = 1;
        test_down->up = up
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值