[关闭]
@Moritz 2019-01-21T12:00:05.000000Z 字数 832 阅读 354

函数的一些注意事项_Chapter 6

C++primer C++ 课程学习 所有文稿


参数传递

const形参和实参

顶层const:指针本身是一个对象,它又可以指向另外一个对象,因此,指针本身是不是常量以及指针所指的是不是一个常量就是两个相互独立的问题。用顶层const(top-level const)表示指针本身是个常量,用低层const(low-level const)表示指针所指对象是一个常量。P57 2.4.3

  1. const int a=4; //不能改变a,const是顶层
  2. int b=a; //正确,当拷贝a时,忽略了它的顶层const
  3. int * const p=&i; //const是顶层的,不能给p赋值
  4. *p=0; //正确,可以通过p改变对象的内容

当用实参初始化形参时,会忽略顶层const,可以传给形参常量或非常量对象。

没仔细看了,P191-192 3.2.6,蓝桥杯暂时用不到,待施工 -2019.1.21

数组形参

数组引用形参

  1. /*形参是数组的引用,维度是类型的一部分,不过限制了函数只能作用于大小为10的数组*/
  2. void print(int (&arr)[10])
  3. {
  4. for (auto elem:arr)
  5. cout<<elem<<endl;
  6. }
  7. /* &arr两端括号不可少*/
  8. f(int &arr[10]) //错误:将arr声明成了引用的数组
  9. f(int (&arr)[10]) //正确:arr是具有是个整数的整型数组的引用

传递多维数组

将多维数组传递给函数时,真正传递的是指向数组首元素的指针,即指向数组的指针,数组第二维(以及后面所有维度)的大小都是数组类型的一部分,不可以省略

  1. /*两个等价定义,该数组的元素是由10个元素组成的数组*/
  2. void print(int (*matrix)[10]){/*...*/}
  3. void print(int matrix[][10]){/*...*/}

matrix两边的括号不可少,去掉括号后表示的含义是指针的数组。


看不下去了,好多陌生名词,看来给重学了。 -2019.1.21

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注