C语言的整理

第一次学着写博客,没什么经验,看官图一乐好了~~~~

基础的定义

%d 十进制有符号整数

%u 十进制无符号整数

%lf 双精度浮点数

%f 浮点数

%s 字符串

%c 单个字符

%p 指针的值

%e 指数形式的浮点数

%x,  无符号以十六进制表示的整数

%0 无符号以八进制表示的整数

%g 自动选择合适的表示法

char <short <int <long (除char(8比特)外c未直接定义大小最小范围)

Signed char -127—127                      unsigned char  0—255                                 8bit     

Signed short-32767—32767    unsigned  short 0—65535                             16bit     

Signed int-32767—32767                    unsigned char  0—65535                               16bit     

Signed long -2147483647—2147483647 unsigned long  0—4094967295                   32bit     

之前群友讨论说一道关于 这个的 面试题 我的回答是除了char8个比特以外无明确定义,但似乎不是正确答案啊!!!

大小印第安序

Big endian低位 放 高地址    PPC 68K

litter endian高位 放 高地址  arm X86 ARM11 

记得初学时的记不清的问题

double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,

不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)

指针

根据我现在对C的理解,我认为一切的都是内存;(挺云里雾里的一句话,也说不清,索性听听就行了)

 对于基础的指针和count结合总结一下:

count加谁身上谁不变

/*基本指针*/
void zhizhen()
{
    int ab = 1; int* ef = &ab;

     int a = 111; int* aa = &a;
     //允许地址转变
     //允许值改变
     aa = ef;     
     *aa = ab;
     cout << "*aa= "<<*aa << "  aa=" << aa <<  endl;
     cout << "*ef= " << *ef << "  ef=" << ef <<  endl;
     cout << endl;
     const int b = 222;        const int* bb = &b;
     //允许地址转变
     //不允许值改变
     bb = ef;
     //*bb = ab;
     cout << "*bb= " << *bb << "  bb=" << aa  << endl;
     cout << "*ef= " << *ef << "  ef=" << ef  << endl;
     cout << endl;

     int c = 333;           int* const cc = &c;
     //不允许地址转变
    //允许值改变
     *cc = ab;
    //cc = ef;
     cout << "*cc= " << *cc << "  cc=" << cc << endl;
     cout << "*ef= " << *ef << "  ef=" << ef << endl;
     cout << endl;


     int d = 444;const    int* const dd = &d;
     //不允许地址转变
    //不允许值改变
    // *dd = ab;
    // dd = ef;
     cout << "*dd= " << *dd << "  dd=" << dd << endl;
     cout << "*ef= " << *ef << "  ef=" << ef << endl;
     cout << endl;    
}

 自己体会一下数组和指针的魅力吧(本质上数组和指针没区别哦)

void shuzu()
{
    int s = 2;//定义一个int型变量s
    char s0 = 3;//定义一个char型变量s0
    int* pa[] = { (int*)"a",(int*)"c" };//定义一个int型指针数组
    char* pb[] = { "c","d" };//定义一个char型指针数组
    pa[0] = &s;//令pa[0]取s地址
    pb[0] = &s0;//令pb[0]取s1地址
    cout << pa[0] << "  " << (void*)pb[0] << endl;//打印pa[0]  pb[0]  是什么?
    cout << *(pa[0]) << "  " << (void*)*(pb[0]) << endl;//定义在pa[0]pb[0]上的是什么?
    cout << sizeof(*(pa[0])) << "  " << sizeof(*(pb[0])) << endl;///定义在pa[0]pb[0]上的东西的大小?
    cout << &(pa[0]) << "  " << &(pb[0]) << endl;//对pa[0]pb[0]取地址得的是什么?
    cout << sizeof(&(pa[0])) << "  " << sizeof(&(pb[0])) << endl;//对pa[0]pb[0]取地址的大小什么?
    cout << &s << "  " << (void*)&s0 << endl;//来看看s 和 s1的地址吧
}

这因该叫指针函数了

/*先看看回调函数的样式,回调下面的函数*/
void option_mode(double (*p)(double,double,int))
{
    p(2,3,1);
}

类似于回调函数,这是不是更高效的代替swich了呢?

//定义一些基本函数有两种类型
double add(double aa0, double aa1){ aa1+=aa0;return aa1;}
double cut(double aa0, double aa1){aa0 -= aa1;return aa0;}

double option(double x, double y ,int oper)
{
    double(*option[])(double , double ) = { add,cut };//我声明一个函数
    //double类型 ,可传入两个double变量,option【】={add,cut};当option【1】=add
    //那么该函数->double(*add)(double,double);
    cout << option[oper](x, y)<<endl;
    return 1;
}
posted @ 2020-04-11 10:53  forup  阅读(186)  评论(0)    收藏  举报