C语言知识总结

1. strlen与sizeof区别问题:

以下程序的输出结果

#include <stdio.h>

void main()
{
    char * ptr="hello";
    char str[]="hello";
    printf("sizeof(pts) is %d\n", sizeof(ptr));//这里输出指针的大小
    printf("sizeof(str) is %d\n", sizeof(str));//这里输出整个str占用的空间大小,包括‘\0’,故输出结果为:6
    printf("strlen(ptr) is %d\n", strlen(ptr));//以下两个都是输出5,输出的是实际的数组或字符串的长度,不包括‘\0’
    printf("strlen(str) is %d\n", strlen(str));
}
sizeof(pts) is 8
sizeof(str) is 6
strlen(ptr) is 5
strlen(str) is 5

2. 求一个数据是否是无符号数据

template<class T>
void judge_unsigned(T a)
{
	int shift=8*sizeof(a)-1;
	cout<<"sizeof(a) is "<<shift+1<<endl;

	if( (a|(1<<shift)) >= 0)
		cout<<a<<"is unsigned data"<<endl;
	else
		cout<<a<<"is signed data"<<endl;
}

void main()
{
	long long a=4;
	
	judge_unsigned(a);

	unsigned int b=4;
	judge_unsigned(b);

}

3. 不使用sizeof获取int,float或double所占用的字节数

使用宏定义来做

template<class T>//使用模板函数实现
int get_size(T *a)//这里需要传进变量的地址
{
	return int(a+1)-int(a);
}
//使用宏来实现,这里将其强制转换成char*类型,除此之外,还需好在宏中对变量取地址
#define GetSize(val) ( (char *)(&val+1) - (char*)(&val) )

void main()
{
	int a[]={1,2,3};
	cout<<"a's size is: "<<get_size(&a)<<"define "<<GetSize(a)<<endl;

	double gd=4.5;
	cout<<"gd's size is: "<<get_size(&gd)<<"define: "<<GetSize(gd)<<endl;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值