总结函数的参数指针参数及const修饰的情况计算机等级考试

文章作者 100test 发表时间 2010:01:01 12:57:24
来源 100Test.Com百考试题网


  void testn(int n)
  {
  n = 0. //正确,但外部n值未变,小心逻辑错误
  }
  void testn(const int n)
  {
  n = 0. //编译错误,加const可以防止逻辑错误
  }
  void testn(int* n)
  {
  n = new int(3). //正确,但外部指针n值未变,小心逻辑错误
  *n = 0. //正确,n指向变量的值被改变
  }
  void testn(int* const n)
  {
  n = new int(3). //编译错误,n是常量指针,加const可以防止逻辑错误
  *n = 0. //正确,n指向变量值被改变
  }
  void testn(const int* n)
  {
  n = new int(3). //正确,但外部指针n值未变,小心逻辑错误
  *n = 0. //编译错误,加const可以防止指针指向的变量值被改变
  }
  void testn(int** ppn)
  {
  *ppn = new int[3]. //正确,ppn指向的指针值被改变
  **ppn = 6. //正确,ppn指向的最终变量值被改变
  *ppn[0] = 7. //正确,ppn指向的最终变量值被改变
  ppn = new int*[3]. //正确,但外部二级指针ppn值未变,小心逻辑错误
  ppn[0] = new int(5). //正确,但外部二级指针ppn值未变,小心逻辑错误
  }
  void testn(int** const ppn)
  {
  *ppn = new int[3]. //正确,二级指针ppn值被改变
  **ppn = 6. //正确,ppn指向的最终变量值被改变
  *ppn[0] = 7. //正确,ppn指向的最终变量值被改变
  //ppn[0] = new int(5). //正确,同*ppn
  //ppn = new int*[3]. //编译错误,ppn是常量二级指针加const可以防止逻辑错误
  }
  void testn( int* const* ppn)
  {
  //*ppn = new int[3]. //编译错误,ppn的值为常量指针,不能改变*ppn的值
  **ppn = 6. //正确,二级指针指向的最终变量值被改变
  *ppn[0] = 7. //正确,二级指针指向的最终变量值被改变
  ppn = new int*[3]. //正确,但外部二级指针ppn值未变,小心逻辑错误
  ppn[0] = new int(5). //编译错误,不能改变*ppn的值
  }
  void testn( int const** ppn) //同testn(const int ** ppn)
  {
  *ppn = new int[3]. //正确,二级指针ppn指向的指针值被改变
  //**ppn = 6. //编译错误,不能改变**ppn的值
  //*ppn[0] = 7. //编译错误,*ppn[0] = **ppn
  //ppn = new int*[3]. //编译错误,int ** 到 const int ** 转换错误
  }源:www.examda.com
  //总结:函数参数为传值方式时,加const可以防止逻辑错误
  //函数参数为传址方式时,加const可以防止参数数据被改变
  //当参数为多级指针时,看const修饰对象可以看const与变量名之间的*
  //当const与变量之间没有*时,修饰的就是多级指针本身
  //当const与变量之间有一个*时,修饰的是多级指针的值
  //如此推算直到修饰最后的变量值,所以const放在变量类型前后效果相同

  编辑特别推荐:

  送给正在学习C 朋友的50条建议

  C 笔试考前练习



相关文章


map和set的排序计算机等级考试
赋值运算符复制构造函数(拷贝构造函数)易混处总结计算机等级考试
计算机二级考试C 基础:句柄计算机等级考试
C 组合框控件运用要领计算机等级考试
总结函数的参数指针参数及const修饰的情况计算机等级考试
模板函数中调用名字包含类的函数计算机等级考试
绝对不要重新定义继承而来的nonvirtual函数计算机等级考试
C 反射的一种实现方式计算机等级考试
ACE编程遇到的问题计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛