指针

c++学习笔记2(const关键词的用法)

萝らか妹 提交于 2020-02-02 23:52:06
定义常量指针 优势(便于类型检查,define无类型检查(目前不是很理解)) (函数参数为常量指针时,可避免函数内部不小心改变参数指针所指的地方,如有出现此类语句,编译则会报错) strcpy:复制字符串 注1:不可通过修改常量指针修改其指向对象 注2:不能把常量指针赋值给非常量指针,反之可以(常量指针指向的内容倾向于尽量不要修改,如此赋值的话,可以通过修改非常量指针的值去修改常量指针指向的内容,存在不安全因素) 注3:如果想要用非常量指针指向常量指针,可通过强制类型转换实现例如const int 类型,赋值时刻可以使yy=(int )xx 注4:不能通过修改常引用修改其引用变量 来源: https://www.cnblogs.com/lamia76/p/12253976.html

【GO学习笔记】数组

心已入冬 提交于 2020-02-02 21:47:52
文章目录 数组定义 数组的初始化 方法一 方法二 方法三 方法四 使用数组 访问数组元素 访问指针数组的元素 把同样类型的一个数组赋值给另外一个数组 编译器会阻止类型不同的数组互相赋值 把一个指针数组赋值给另一个 在函数间传递数组 使用值传递,在函数间传递大数组 使用指针在函数间传递大数组 数组是值类型 数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 数组定义 var 数组变量名 [ 元素数量 ] T 数组的初始化 数组的初始化也有很多方式。 方法一 声明一个数组,并设置为零值 var array [ 5 ] int 每个元素都初始化为0,也就是整型的零值。 方法二 使用数组字面量声明数组 // 声明一个包含5 个元素的整型数组 // 用具体值初始化每个元素 array := [ 5 ] int { 10 , 20 , 30 , 40 , 50 } 方法三 让Go 自动计算声明数组的长度,如果使用 ... 替代数组的长度。 // 声明一个整型数组 // 用具体值初始化每个元素 // 容量由初始化值的数量决定 array := [ ... ] int { 10 , 20 , 30 , 40 , 50 } 方法四 声明数组并指定特定元素的值 // 声明一个有5 个元素的数组 // 用具体值初始化索引为1 和2 的元素

c++ RTTI(运行时类型识别)

跟風遠走 提交于 2020-02-02 16:21:54
通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型。c++通过下面两个操作符提供RTTI。 (1)typeid:返回指针或引用所指对象的实际类型。 (2)dynamic_cast:将基类类型的指针或引用安全的转换为派生类型的指针或引用。 对于带虚函数的类,在运行时执行RTTI操作符,返回动态类型信息;对于其他类型,在编译时执行RTTI,返回静态类型信息。 当具有基类的指针或引用,但需要执行派生类操作时,需要动态的强制类型转换(dynamic_cast)。这种机制的使用容易出错,最好以虚函数机制代替之。 dynamic_cast 操作符 如果dynamic_cast转换指针类型失败,则返回0;如果转换引用类型失败,则抛出一个bad_cast类型的异常。 可以对值为0的指针使用dynamic_cast,结果为0。 dynamic_cast会首先验证转换是否有效,只有转换有效,操作符才进行实际的转换。 if (Derived *derivedPtr = dynamic_cast<Derived *>(basePtr)) { // use the Derived object to which derivedPtr points } else { // basePtr points at a Base object // use the Base object to

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 {

深入理解指针函数

ⅰ亾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的函数的指针。 虽然它们只有一个括号的差别

返回值为函数指针的函数(转)

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