当前位置: 代码迷 >> 综合 >> c语言 使用指针操作数组踩坑,sizeof(数组名) sizeof(指针名)的不同
  详细解决方案

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

热度:70   发布时间:2023-12-04 11:48:51.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));//结果是8test 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]));//结果是2printf("example size : %d \n",(int)sizeof(example));//结果是40//*************重点**************///*这里为什么是8呢,因为这里只是求出了指针的大小,因为指针中是储存地址的,64位系统,地址大小为64位,所以需要8个字节来储存,所以大小是8*/printf("test_set size : %d \n",(int)sizeof(test_set));//结果是8printf("test_set length : %d \n",sizeof(test_set)/sizeof(test_set[0]));//结果是0printf("test_set size : %d \n",(int)sizeof(*test_set));//结果是20printf("test_set length : %d \n",(int)sizeof(test_set[0])+(int)sizeof(test_set[1]));//结果是40return 0;
}

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

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

  相关解决方案