详解c语言中的sizeof

首先,sizeof是c语言的一种单目操作符,以字节的形式给出了其操作数的存储大小,其返回值为size_t,在64位机器下被定义为long unsigned int。

1.基本数据类型

#include<stdio.h>
#include<cstring>
int main(){
	printf("%d\n",sizeof(int));//4
	printf("%d\n",sizeof(short));//2
	printf("%d\n",sizeof(long));//4
	printf("%d\n",sizeof(long long));//8
	printf("%d\n",sizeof(char));//1
	printf("%d\n",sizeof(double));//8
	printf("%d\n",sizeof(float));//4
	
	return 0;
}

2.数组

3.字符串

包含了字符串末尾结束符(strlen()函数是求字符串的有效长度,不包含末尾结束符 '\0')

#include<stdio.h>
#include<cstring>
int main(){
	int a[10];
	printf("%d\n",sizeof(a));//40,int型数组4*10
	printf("%d\n",sizeof(&a));//8,指针 

	char str[]="abcde";
	printf("%d\n",sizeof(str));//6
	printf("%d\n",strlen(str));//5
	char str1[]="abcde\0";
	printf("%d\n",sizeof(str1));//7
	printf("%d\n",strlen(str1));//5
	
	char b[3][3];
	int c[3][3];
	printf("%d\n",sizeof(b));//9,3*3的char型矩阵 
	printf("%d\n",sizeof(c));//36,3*3*4
	int d[8];
	printf("%d\n",sizeof(d));//32,4*8
	
	return 0;
}

4.指针

在32位机器中,指针的长度为4,在64位机器中指针的长度为8

#include<stdio.h>
#include<cstring>
int main(){
	int i=0;
	printf("%d\n",sizeof(i));//4
	int *p=&i;
	printf("%d\n",sizeof(p));//8,由于mac是64位的 
	int a[10];
	printf("%d\n",sizeof(a));//40,int型数组4*10
	printf("%d\n",sizeof(&a));//8,指针 
	return 0;
}
#include<stdio.h>
#include<cstring>
void f1(char a[]){
	int len=sizeof(a);
	printf("%d\n",len);//8,a是指针 
}
int main(){
	char str[5]="abcd";
	printf("%d\n",sizeof(str));//5
	f1(str);//8,传入的参数是一个指针 
	return 0;
}

几点重要应用

1.求数组元素的个数

int len1 = sizeof(a)/sizeof(char);总长度/单个元素的长度

int len2 = sizeof(b)/sizeof(b[0]);总长度/第一个元素的长度

2.动态内存分配

现在分配足以容纳10个整数的内存,并且我们不知道该特定机器中的sizeof(int)。 

int *ptr=malloc(10*sizeof(int));

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值