1. strlen与sizeof差异问题:
以下程序的输出
#include <stdio.h> void main() { char * ptr="hello"; char str[]="hello"; printf("sizeof(pts) is %d ", sizeof(ptr));//这里输出指针的大小 printf("sizeof(str) is %d ", sizeof(str));//这里输出整个str占用的空间大小,包含‘ ’,故输出结果为:6
printf("strlen(ptr) is %d ", strlen(ptr));//下面两个都是输出5,输出的是实际的数组或字符串的长度,不包含‘ ’ printf("strlen(str) is %d ", 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; }