指针变量

C++面试

泪湿孤枕 提交于 2020-02-02 14:31:08
vector中v[i]和v.at(i)的区别 v[5]; //A v.at[5]; //B 如果v非空,A和B没有任何区别。如果v为空,B会抛出std::out_of_range异常。 c++标准不要求vecor<T>::operator[]进行下标越界检查,原因是为了提高效率。如果需要下标越界检查,使用at。但性能会受到影响,因为越界检查增加了性能开销。 vector扩容原理 新增元素:vector通过一个连续的数组存放元素,如果集合已满,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,在插入新增的元素; 对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了; 初始时刻vector的capacity为0,塞入第一个元素后capacity增加为1; 不同的编译器实现的扩容方式不一样,VS2015中以1.5倍扩容,GCC以2倍扩容 哪些函数不能成为虚函数? 不能被继承的函数和不能被重写的函数。 1.普通函数 2.友元函数 3.构造函数 4.内联成员函数 5.静态成员函数 溢出 1.栈溢出(栈的大小通常是1M-2M) 栈溢出是指函数中的局部变量造成的溢出(注:函数中形参和函数中的局部变量存放在栈上) 栈溢出包含两种情况:1.分配的的大小超过栈的最大值,2.分配的大小没有超过最大值,但是分配的buff比接收buff小

指针函数

这一生的挚爱 提交于 2020-02-02 10:24:33
顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 * 函数名 ( 函数参数表列 ); 其中,后缀运算符括号“ () ” 表示这是一个函数,其前缀运算符星号“ * ”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为 … 的指针(地址),“ 类型名 ”表示函数返回的指针指向的类型”。 “ ( 函数参数表列 ) ” 中的括号为函数调用运算符, 在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下: int *pfun(int, int); 由于“ * ”的优先级低于“ () ”的优先级,因而 pfun 首先和后面的“ () ”结合,也就意味着, pfun 是一个函数。即: int *(pfun(int, int)); 接着再和前面的“ * ”结合,说明这个函数的返回值是一个指针。由于前面还有一个 int ,也就是说, pfun 是一个返回值为整型指针的函数。 我们不妨来再看一看,指针函数与函数指针有什么区别? int (*pfun)(int, int); 通过括号强行将 pfun 首先与“ * ”结合,也就意味着, pfun 是一个指针,接着与后面的“ () ”结合,说明该指针指向的是一个函数,然后再与前面的 int 结合,也就是说,该函数的返回值是 int 。由此可见, pfun

深入理解指针函数

冷暖自知 提交于 2020-02-02 08:50:59
1. 指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 * 函数名 ( 函数参数表列 ); 其中,后缀运算符括号“ () ” 表示这是一个函数,其前缀运算符星号“ * ”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为 … 的指针(地址),“ 类型名 ”表示函数返回的指针指向的类型”。 “ ( 函数参数表列 ) ” 中的括号为函数调用运算符, 在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下: int *pfun(int, int); 由于“ * ”的优先级低于“ () ”的优先级,因而 pfun 首先和后面的“ () ”结合,也就意味着, pfun 是一个函数。即: int *(pfun(int, int)); 接着再和前面的“ * ”结合,说明这个函数的返回值是一个指针。由于前面还有一个 int ,也就是说, pfun 是一个返回值为整型指针的函数。 我们不妨来再看一看,指针函数与函数指针有什么区别? int (*pfun)(int, int); 通过括号强行将 pfun 首先与“ * ”结合,也就意味着, pfun 是一个指针,接着与后面的“ () ”结合,说明该指针指向的是一个函数,然后再与前面的 int 结合,也就是说,该函数的返回值是 int 。由此可见

指针函数与函数指针的区别

跟風遠走 提交于 2020-02-02 08:45:44
一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 表示: float *fun(); float *p; p = fun(a); 注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。 来讲详细一些吧!请看下面 指针函数: 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。 格式: 类型说明符 * 函数名(参数 ) 当然了,由于返回的是一个地址,所以类型说明符一般都是int。 例如: int *GetDate(); int * aaa(int,int); 函数返回的是一个地址值,经常使用在返回数组的某一元素地址上。 int * GetDate(int wk,int dy); main() { int wk,dy; do {

指针函数与函数指针的区别

a 夏天 提交于 2020-02-02 08:45:27
一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 * 函数名(参数表) int *f(x ,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 表示: float *fun(); float *p; p = fun(a); 注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。 来讲详细一些吧!请看下面 指针函数: 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。 格式: 类型说明符 * 函数名(参数 ) 当然了,由于返回的是一个地址,所以类型说明符一般都是int。 例如: int *GetDate(); int * aaa(int,int); 函数返回的是一个地址值,经常使用在返回数组的某一元素地址上。 int * GetDate(int wk,int dy); main() { int wk,dy; do {

深入理解指针函数

ⅰ亾dé卋堺 提交于 2020-02-02 08:39:24
在写《windows核心编程系列》谈谈修改导入段拦截API中,遇到了函数指针,由于以前接触甚少,花了很久才弄明白。见到一篇文章,对函数指针介绍的比较好。便转载至此。 转自: http://blog.sina.com.cn/s/blog_5e8facd20100qn20.html 1.指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 * 函数名 ( 函数参数表列 ); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“ 类型名 ”表示函数返回的指针指向的类型”。 “( 函数参数表列 )”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下: int *pfun(int, int); 由于“*”的优先级低于“()”的优先级,因而pfun首先和后面的“()”结合,也就意味着,pfun是一个函数。即: int *(pfun(int, int)); 接着再和前面的“*”结合,说明这个函数的返回值是一个指针。由于前面还有一个int,也就是说,pfun是一个返回值为整型指针的函数。 我们不妨来再看一看,指针函数与函数指针有什么区别? int (*pfun)(int, int

深入理解指针函数

筅森魡賤 提交于 2020-02-02 08:38:59
1.指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 *函数名(函数参数表列); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。 “(函数参数表列)”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下: int *pfun(int, int); 由于“*”的优先级低于“()”的优先级,因而pfun首先和后面的“()”结合,也就意味着,pfun是一个函数。即: int *(pfun(int, int)); 接着再和前面的“*”结合,说明这个函数的返回值是一个指针。由于前面还有一个int,也就是说,pfun是一个返回值为整型指针的函数。 我们不妨来再看一看,指针函数与函数指针有什么区别? int (*pfun)(int, int); 通过括号强行将pfun首先与“*”结合,也就意味着,pfun是一个指针,接着与后面的“()”结合,说明该指针指向的是一个函数,然后再与前面的int结合,也就是说,该函数的返回值是int。由此可见,pfun是一个指向返回值为int的函数的指针。 虽然它们只有一个括号的差别

[置顶] ※数据结构※→☆线性表结构(queue)☆============循环队列 顺序存储结构(queue circular sequence)(十)

点点圈 提交于 2020-02-02 04:39:59
循环队列 为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。 条件处理 循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列是"空"还是"满"。 解决这个问题的方法至少有三种: ① 另设一布尔变量以区别队列的空和满; ② 另一种方式就是数据结构常用的: 队满时:(rear+1)%n==front,n为队列长度(所用数组大小),由于rear,front均为所用空间的指针,循环只是逻辑上的循环,所以需要求余运算。如图情况,队已满,但是rear(5)+1=6!=front(0),对空间长度求余,作用就在此6%6=0=front(0)。 ③ 设队列中元素个数大小,和内存大小个数。判断比较二个值是否相等。. ②、 ③判断代码 /** * IsFull * * @param * @return BOOL * @note the buffer is full? * @attention */ template<typename T> BOOL AL_QueueCircularSeq<T>::IsFull() const { return (m_dwMaxSize <= Size

信息安全系统设计基础实验五:通讯协议设计

旧时模样 提交于 2020-02-02 01:08:52
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:52.53 姓名:王思亓 赵阳林 学号:20135205 20135334 成绩: 指导教师:娄嘉鹏 实验日期:2015.11.24 实验密级: 预习程度: 实验时间:15:30—18:00 仪器组次: 必修/选修:必修 实验序号: 实验名称:通讯协议设计 实验目的与要求: 1、掌握在ARM开发板实现一个简单的WEB服务器的过程。 2、学习在ARM开发板上的SOCKET网络编程。 3、学习Linux下的signal()函数的使用。 实验仪器: ARM机 1台 PC机 1台 REDHAT 1台 一、实验内容 1.阅读理解源码 进入07_httpd所在的目录,使用vi编辑器理解源代码。 2.编译应用程序 使用gcc编译器,分别对文件夹下的copy.c和httpd.c进行编译,出现copy和httpd的可执行文件。 3.下载调试 使用NFS服务方式将HPPTD下载到开发板上,并拷贝测试用的网页进行调试 4.本机测试 在台式机的浏览器中输入http://192.168.0.121,观察在客户机的浏览器中的链接请求结果和在开发板服务器上的打印信息。 二、实验代码理解 httpd.c代码分析 / * httpd.c: A very simple http server * Copyfight (C) 2003

int *p、int **p、int (*p)()、int *p()、int *p[n]、int (*p)[n]等简单总结

我怕爱的太早我们不能终老 提交于 2020-02-01 23:41:36
关于指针定义的一些简单归纳和总结。 int *p int *p表示的是一级指针,表示p所指向的地址里面存放的是一个int类型的值。 一级指针存放变量的地址,指向的值是变量的内容。如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值; 一级指针通过形参,可以修改实参中指针所指向的地址中的值。修改不了实参中指针所指向的地址。需要借助二级指针才可以。 int **p int **p表示的是 二级指针 ,表示p所指向的地址里面存放的是一个指向int类型的指针。 二级指针 存放一级指针的地址,指向一级指针。如int *p ={1,2,3}, int **pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1。 指针数组 的数组名传递参数对应为指针的指针即 二级指针 ,二维数组的数组名传递参数对应为数组指针即指向一维数组的指针 int (*p)() 简单的理解,这就可以理解为调用函数,其中(*p)这个整体可以看作是函数名称,p代表函数的入口地址。很简单的理解吗,c语言中()就代表了函数,所以把 *p用括号括在一起变作 (*p)就代表了一个函数。i int *p() 为了便于理解,可以把这个p换成一个函数的名字 ,比如fun,那么int *fun()代表的是调用这个函数后,这个函数的返回值是一个指针。 int *p[n] int *p[n]