C语言关键字sizeof 与strlen

sizeof()

 sizeof操作数所占空间的字节数大小,是一种c中的基本运算符

  可以以类型、指针、数组和函数等作为参数。
  返回值类型为unsigned int

   运算值在编译的时候就出结果,所以可以用来定义数组维数。

1. #include<stdio.h>
2. // sizeof 关键字 计算变量或数据类型所占的字节个数
3. int main()
4. {
5. printf("char size: %d \n", sizeof(char) );
6. printf("short size: %d \n", sizeof(short) );
7. printf("int size: %d \n", sizeof(int) );
8. printf("long int size: %d \n", sizeof(long int) );
9. printf("long long size: %d \n", sizeof(long long) );
10. printf("float size: %d \n", sizeof(float) );
11. printf("double size: %d \n", sizeof(double) );

    return 0; 
}

 运行结果:

sizeof(char): 1
sizeof(short): 2
sizeof(int): 4
sizeof(long): 4
sizeof(long long): 8
sizeof(float): 4
sizeof(double): 8

字节(byte)是计算机信息技术用于计量存储容量的一种计量单位。一个字节8位二进制构成。

程序示例: 

 

 

 

 

sizeof计算指针的占用空间大小

这里需要注意的是,32位平台所有类型的指针的占用空间大小都是4个字节,64位平台所有类型的指针占用的空间大小为8个字节,观察如下代码:

#include <stdio.h>


int main()
{
	printf("sizeof(char*): %d\n", sizeof(char*));
	printf("sizeof(short*): %d\n", sizeof(short*));
	printf("sizeof(int*): %d\n", sizeof(int*));
	printf("sizeof(long*): %d\n", sizeof(long*));
	printf("sizeof(long long*): %d\n", sizeof(long long*));
	printf("sizeof(float*): %d\n", sizeof(float*));
	printf("sizeof(double*): %d\n", sizeof(double*));
	return 0;
}

 在32位下执行结果如下:

sizeof(char*): 4
sizeof(short*): 4
sizeof(int*): 4
sizeof(long*): 4
sizeof(long long*): 4
sizeof(float*): 4
sizeof(double*): 4

 在64位下执行结果如下:

sizeof(char*): 8
sizeof(short*): 8
sizeof(int*): 8
sizeof(long*): 8
sizeof(long long*): 8
sizeof(float*): 8
sizeof(double*): 8

用于计算数组长度以及对字符数组时与strlen的区别

使用sizeof计算数组时,结果为数组长度*数组元素占用空间的大小,当数组为字符数组时,sizeof的功能是一致的,只不过当使用字符数组定义字符串的时候,对于字符串比如hello,数组中会自动增加一个元素’\0’,所以sizeof计算的结果为6,而strlen是计算字符串长度的,遇到’\0’结束但是不把’\0’计算在内因此strlen计算的结果为5,这与我们感觉上的字符串的长度为5的感觉是一致的,这就是strlen和sizeof在计算字符数组的时候的区别.

示例1: 

# include <stdio.h>
# include <string.h>


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

 运行结果如下:

sizeof(arr): 40
sizeof(arr2): 6
strlen(arr2): 5

示例二:

int main()
{
	char *p = "hello";
	char arr1 []= "hello";
	char arr2[] = { 'h', 'e', 'l', 'l', 'o' };
	printf("%d\n", sizeof( p));
	//结果4,因为指针变量的所占空间大小仅仅和操作系统位数有关32-4,64-8
	printf("%d\n", sizeof(arr1));
	//结果6,字符串默认以\0结尾,sizeof()包含\0的计算
	printf("%d\n", sizeof(arr2));
	//结果为5,因为为字符型表示,并不含有\0(仅仅字符串有\0)
	printf("%d\n", strlen( p));
	//结果为5,strlen求的是字符串的长度,不包含\0
	printf("%d\n", strlen(arr1));
	//结果为5,strlen求的是字符串的长度,不包含\0
	printf("%d\n", strlen(arr2));
	//因为字符型不包含\0,但字符串需要找到\0才可结束,所以在'o'之后继续向后读取直到找到\0,所以是一个随机值

最后转载一篇写的很好的博客,参考

(97条消息) C语言中的sizeof()和strlen()的区别_strlen()与sizeof()_zhao111222333444的博客-CSDN博客icon-default.png?t=N4P3https://blog.csdn.net/zhaocx111222333/article/details/109142273?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168569089616800211541565%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168569089616800211541565&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-109142273-null-null.142^v88^control,239^v2^insert_chatgpt&utm_term=sizeof&spm=1018.2226.3001.4187
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值