C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C语言sizeof()计算空间大小

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

作者: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()计算空间大小内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文