深入理解C语言sizeof()计算空间大小为8的问题

 更新时间:2023年09月07日 11:18:57   作者:xiaoyan_lu  
本文将介绍C语言中的sizeof()函数,以及如何使用它来计算变量、数据类型和数组在内存中的大小,具有一定的参考价值,感兴趣的可以了解一下

在练习数据结构过程中,定义指针p,并且申请了10个char类型空间,但在计算p所指空间大小时候,发现了一些奇怪的现象。

#include <stdio.h>
#include <stdlib.h>
int main(){
    char s[12];
    printf("the size of memory occupied = %d\n",sizeof(s));//12
    char *s1 = "hello,world.";
    printf("the size of memory occupied = %d\n",sizeof(s1));//8
    char *s2 = (char *)malloc(sizeof(char) * 12);
    printf("the size of memory occupied = %d\n",sizeof(s2));//8
    int a[3] = {1,2,3};
    printf("the size of memory occupied = %d\n",sizeof(a));//12
    int *a1 = (int *)malloc(sizeof(int)*3);
    printf("the size of memory occupied = %d\n",sizeof(a1));//8
    return 0;
}

可以发现,sizeof()只有在计算定义为数组的大小是准确的,在计算指针指向的数组或者申请空间的大小时候,不准确。

通过查阅资料得知,sizeof()不可以用来计算申请出来空间的大小。

那么,为什么是8?是因为8是指针所占空间的大小。

那我想要计算申请的空间的大小,怎么办?

=========>  _msize()  <=============

_msize()函数可以计算出申请空间的大小,如下:

#include <stdio.h>
#include <stdlib.h>
int main(){
    char *s2 = (char *)malloc(sizeof(char) * 12);
    printf("sizeof(s2) = %d\n",sizeof(s2));//8
    printf("_msize(s2) = %d\n",_msize(s2));//12
    int *a1 = (int *)malloc(sizeof(int)*3);
    printf("sizeof(a1) = %d\n",sizeof(a1));//8
    printf("_msize(a1) = %d\n",_msize(a1));//12
    return 0;
}

!!!!!!!!!!!!如下两位博主讲的更为详细!!!!!!!!!!!!!!!!!!

参考资料:

C语言——判断矩阵维数(sizeof、_msize)

C++学习笔记之如何获取指针开辟空间或数组空间的大小以及_countof、sizeof、strlen、_Msize的区别

到此这篇关于深入理解C语言sizeof()计算空间大小为8的问题的文章就介绍到这了,更多相关C语言sizeof()计算空间大小内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现结束应用进程小工具

    C++实现结束应用进程小工具

    这篇文章主要为大家详细介绍了C++实现结束应用进程小工具,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • C语言中对字母进行大小写转换的简单方法

    C语言中对字母进行大小写转换的简单方法

    这篇文章主要介绍了C语言中对字母进行大小写转换的简单方法,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C语言中获取进程识别码的相关函数

    C语言中获取进程识别码的相关函数

    这篇文章主要介绍了C语言中获取进程识别码的相关函数,分别为getpid()函数和getppid()函数的使用,需要的朋友可以参考下
    2015-08-08
  • Qt圆角窗口的两种实现方案详解

    Qt圆角窗口的两种实现方案详解

    在Qt中设置控件的圆角通常可以通过Qt样式表(QSS)来实现,这是一种非常灵活且强大的方式来定制Qt控件的外观,这篇文章主要介绍了Qt圆角窗口的两种实现方案,需要的朋友可以参考下
    2026-01-01
  • C语言实现简单职工信息管理系统

    C语言实现简单职工信息管理系统

    这篇文章主要为大家详细介绍了C语言实现简单职工信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • QT使用QComBox和QLineEdit实现模糊查询功能

    QT使用QComBox和QLineEdit实现模糊查询功能

    模糊查询是指根据用户输入的文本,在下拉框的选项中进行模糊匹配,并动态地显示匹配的选项,本文将使用QComBox和QLineEdit实现模糊查询功能,需要的可以参考下
    2023-11-11
  • C++实现堆排序实例介绍

    C++实现堆排序实例介绍

    大家好,本篇文章主要讲的是C++实现堆排序实例介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C++中的函数修饰符深入讲解

    C++中的函数修饰符深入讲解

    这篇文章主要给大家介绍了关于C++中函数修饰符的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • C语言实现猜数字

    C语言实现猜数字

    这篇文章主要为大家详细介绍了C语言实现猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • 一文详解C++关键词auto的用法

    一文详解C++关键词auto的用法

    在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,在 C++11中,auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,本文将给大家详细的介绍一下C++关键词auto的用法,需要的朋友可以参考下
    2024-02-02

最新评论