c++学习笔记(3)——关于函数指针与数组

时间:2022-12-23 21:42:56

· 通常情况下,我们将数据可以存储在1)变量,2)标准库中的容器(如向量)。而低级数据结构:更危险,更难,不过更有效甚至是万能的。

· 动态管理内存主要是通过new和delete表达式实现的。

· 指针和数组总是统计出现的。

· 指向函数的指针:

函数不是对象,我们无法进行复制或者赋值,也无法将函数作为参数,程序中无法创建或者修改一个函数——只有编译器可以这样做。一个程序对函数进行的全部操作只有:1、调用函数 2、得到它的地址这两种情况。

函数指针声明;

int (*fp) (int);//返回值为int类型,参数类型为int类型的函数

int next(int n)
{
return n + 1.0;
}

/*接下来两种获得函数地址的方法赋值都是对的*/
fp = &next;
fp = next;


/*接下来两种利用函数指针调用函数的方法都是对的*/
i = (*fp) (i);
i = fp(i);
</pre><pre name="code" class="cpp">
/*还可以用typedef来定义某标识符为一个合适的指向函数的指针*/
typedef double (*analysis_fp) (const vector<Student_info>&);
</pre><pre name="code" class="cpp">
/*在定义好之后,就可以使用该类型来声明新函数(注意是函数!)*/
analysis_fp get_anaysis_ptr();//注意要加括号表示这是函数
</pre><pre name="code" class="cpp">
/*此外,函数指针经常被用作另一函数的参数(这个函数一般是泛型函数,因为如果普通函数,直接调用即可,没有必要用函数指针)*/  
template<class In, class Pred>
In find_if(In begin, In end, Pred f)
{
<span style="white-space:pre"></span>while(begin != end && !f(*begin)) //这里在具体实现时,就可以用f调用不同的函数
<span style="white-space:pre"></span>++begin;
<span style="white-space:pre"></span>return begin;
}//In一般是迭代器,可以看出来返回值也是迭代器
<span style="font-family: Arial, Helvetica, sans-serif;"> </span>

· 


 · 数组是核心语言的一部分,而不是标准库的内容,c++的语法要求数组元素的个数必须在编译的时候确定,这一要求表明,数组不能像标准库中的容器一样动态的增加或者减小尺寸。数组不是类,没有size_type这个成员变量,但是在<cstddef>头文件中定义了一个更为普遍的类型size_t(无符号类型),大小足以装下任何对象。


const siez_t Ndim = 3;
double coords[Ndim];//更为科学的定义一个数组


· static告诉编译器在使用相应定义的变量的时候,只会初始化一次,否则每次都会初始化。

· sizeof这个关键字可以用来获取数组的元素个数:sizeof(e)返回一个size_t类型的值。故实际上要获得真正的元素个数的代码是sizeof(numbers)/sizeof(*numbers),其中number是是一个数组。

· 要输出“???”代码是 “?\?\?"注意要加反斜杠