#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用了,就自己在写动态数组,然后就遇到了这个坑