sizeof运算符

发布时间:2024年01月23日

目录

1.基本概念和语法结构

2.计算数组长度时sizeof与strlen的区别

3.使用sizeof计算指针大小


基本概念和语法结构

虽然sizeof的书写方法:? ?sizeof(数据类型或是变量名);? ?但sizeof是运算符而不是函数。sizeof的功能是用来计算变量(或数据类型)在当前系统中占用内存的字节数。

当用来计算数据类型时写成:

sizeof(数据类型);
printf("sizeof(char): %d\n", sizeof(char));
printf("sizeof(short): %d\n", sizeof(short));
printf("sizeof(int): %d\n", sizeof(int));

此处的括号必须写上

当用来计算变量名时写成:

  sizeof(变量名);
  sizeof 变量名;
int a = 1;
int b = 2;
printf("a占用的内存是=%d\n", sizeof(a));
printf("b占用的内存是=%d\n", sizeof b);

此处的括号可省略

计算数组长度时sizeof与strlen的区别

先上代码有图有真相

int main() {
	char str[] = "HelloWorld";
	printf("sizeof(str):%d\n",sizeof(str));
	printf("strlen(str):%d\n", strlen(str));
	return 1;
}

注:使用strlen需要引入#include <string.h>

运行结果为:? ? ? ? ? ?sizeof(str):11
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?strlen(str):10

显然字符串的长度为10,那sizeof的计算结果为什么是11呢?因为当使用字符数组定义字符串时,对于字符串比如HelloWorld,数组中会自动增加一个终止的元素’\0’,所以sizeof计算的结果为11;而strlen获取字符串长度时只计算字符串开头和终止的元素’\0’之间的字符数(不包括终止的元素’\0’本身)。

int main()
{
	int arr[] = {1,2,3,4,5};
	printf("sizeof(arr): %d\n", sizeof(arr));
	char arr1[] = "HelloWorld";
	printf("sizeof(arr2): %d\n", sizeof(arr1));
	printf("strlen(arr2): %d\n", strlen(arr1));
	return 0;
}

执行结果为:

sizeof(arr): 20
sizeof(arr2): 11
strlen(arr2): 10

使用sizeof计算指针大小

当使用sizeof计算指针大小时,32位平台所有类型的指针的占用空间大小都是4个字节,64位平台所有类型的指针占用的空间大小为8个字节。

int main()
{
	printf("sizeof(int*): %d\n", sizeof(int*));
	return 0;
}

32位执行结果为:sizeof(int*): 4? ? ? 而64位执行结果为:sizeof(int*): 48

文章来源:https://blog.csdn.net/2301_80658096/article/details/135706267
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。