• C语言指针以及和const共用时的注意点(mooc)


    • 函数中return只能返回一个值,指针可以使得函数有多个返回值。通过传指针参数,最终函数执行完毕,指针参数就相当于是返回值,调用者可以使用该指针或该指针指向的变量。
    • 指针的用途:函数返回运算状态,而运算结果通过指针返回。比如C语言中除法,用1表示成功,0表示出错。计算结果用指针参数返回。其他语言有异常机制解决类似问题。
    • 指针不能够还没赋值就去使用,比如
      int *p;
      *p = 100;
      // 这样做是错误的,程序可能正常运行,但终会出错。因为p没有指向变量
      int *p = 0;
      *p = 10; // 也是错误的
      // 下面这样做才是正确的 int a; int *p; p = &a; *p = 4;
    • 数组变量本身表达地址, int a[5]; int *p = a; //无需加& , 但是数组的单元表达的是变量,需要用&取地址。int *b = &a[4];
    • [] 运算符可以对数组用,也可以对指针用。
    • * 运算符可以对指针用,也可以对数组用。*a = 5; //a是数组
    • 数组变量可以理解为是const的指针,不能被赋值。意思是不能把其他变量的地址赋值给数组变量本身。可以理解为数组变量本身是一个常量。
    • 指针可以是const,指针所指也可以是const。
      •   指针是const,表示一旦得到了某个变量的地址,不能再指向其他的变量。
        int  * const p = &i;
        *p = 26; // ok
        p++; // error
      • 指针所指是const:表示不能通过这个指针去修改那个变量。并不能使得那个变量成为const
        const  int * p = &i;
        *p = 26// error, *p是const,但是注意i的值并不是const
        i = 26//ok
        p++; //ok
        p = &j;//ok
      • const 的位置不同,含义不同
        int i;
        const int * p1 = &i; // 不能通过*p1 修改i 变量的值
        int const * p2 = &i; // 不能通过*p2 修改i 变量的值
        int * const p3 = &i; // p3不能指向其他变量,只能指向i
        如何判断的?
        const在* 前面表示不能通过*p 来修改变量的值
        const 在* 后面表示指针p不能再指向其他变量
    • 转换:总是可以把一个非const的值转换成const的。当要传递的参数类型比地址大的时候,这是常用的手段:既能用比较少的字节数传递值给参数,又能避免函数对面的变量的修改。比如结构体,结构体传指针,如果不想函数对结构体进行修改,就可以加上const。
    • const数组,因为数组本身就不能再被赋值其他变量的地址了。所以cosnt  int a[]  =  {1,2,3,4,5};  表示数组的每个单元不能被改变,意思是1,2,3,4,5都是常量,不能被改变了。只能在初始化的时候对数组赋值。
    • 因为把数组传入函数时,传入的是地址。函数内部可以对数组进行修改,如果不想函数内部对数组进行修改,可以加上const。
  • 相关阅读:
    装饰器 转载自 http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html
    no_merge hint
    优化实例- not use hash to avoid temp space issue
    明日计划
    优化实例- not in 和 not exists
    insert into varchar2(8000)
    图像的批处理
    图像数据类型及颜色空间转换
    图像的读取,显示与保存(基于skimage模块)
    图像直方图
  • 原文地址:https://www.cnblogs.com/bneglect/p/14642429.html
Copyright © 2020-2023  润新知