c语言 使用指针操作数组踩坑,sizeof(数组名) sizeof(指针名)的不同

4 篇文章 0 订阅
本文通过一个具体的C语言代码示例,详细解析了结构体与指针的使用方式,特别是如何计算结构体实例的大小及指针变量指向结构体时的行为表现。文章还解释了不同类型的sizeof运算符在结构体和指针上下文中的应用。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct test
{
    int s[4];
    char a[2];
}test;


int main(){
    test* test_set;
    printf("test_set size : %d \n",(int)sizeof(test_set));//结果是8

    test example[2] ={{{1,2,3,4},{'1','1'}},{{5,6,7,8},{'2','2'}}};
    test_set = (test*)malloc(sizeof(example));

    printf("example length : %d \n",(int)sizeof(example)/sizeof(example[0]));//结果是2
    printf("example size : %d \n",(int)sizeof(example));//结果是40

    //*************重点**************//
    /*
    这里为什么是8呢,因为这里只是求出了指针的大小,因为
    指针中是储存地址的,64位系统,地址大小为64位,所以需要
    8个字节来储存,所以大小是8
    */
    printf("test_set size : %d \n",(int)sizeof(test_set));//结果是8


    printf("test_set length : %d \n",sizeof(test_set)/sizeof(test_set[0]));//结果是0
    printf("test_set size : %d \n",(int)sizeof(*test_set));//结果是20
    printf("test_set length : %d \n",(int)sizeof(test_set[0])+(int)sizeof(test_set[1]));//结果是40

    return 0;
}

在搜索原理的时候找到了这篇文章,写的很详细
https://blog.csdn.net/u012707739/article/details/75732159

ps:最近在使用deepstream写追踪计数算法,deepstream是c语言环境,之前很多方法都是c++写的,踩了不少的坑,包括混合编译cmakelist的写法还有c和c++函数互相调用的转换。。。c语言因为没有vector用了,就自己在写动态数组,然后就遇到了这个坑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值