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

4 篇文章 0 订阅
#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、付费专栏及课程。

余额充值