zoukankan      html  css  js  c++  java
  • C语言知识汇总

    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;
    }




  • 相关阅读:
    hdu 4115 石头剪子布(2-sat问题)
    AFNetWorking POST Multi-Part Request 上传图片
    左右c++与java中国的垃圾问题的分析与解决
    ACM核武器
    MAX2323E
    cocos2d-x 发动机分析:程序如何开始和结束?
    STL 源代码分析 算法 stl_heap.h
    Android 4.4(KitKat)表格管理子系统
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5040302.html
Copyright © 2011-2022 走看看