zoukankan      html  css  js  c++  java
  • 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。
  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/bneglect/p/14642429.html
Copyright © 2011-2022 走看看