![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 55
雪舞飞影
喜欢钻研Android源码的程序猿
展开
-
函数参数的传递问题(一级指针和二级指针)
(1)概念一级指针:即我们一般说的指针,就是内存地址;二级指针:指向指针的指针,就是地址的地址;例如:int a=1;int *p=&a; // p为a变量的地址,通过*p可以得到a的值int **q=&p; // q为p指针的地址,通过**q可以得到a的值(2)指针参数传递的示例(A)sample 1#include<stdio.h> void fun(int *p){ int b=100; p=&b;}原创 2022-04-08 11:44:47 · 682 阅读 · 0 评论 -
Android中添加CallStack
(1)Java中添加Java中添加callstack常见以下几种方式。import android.util.Log;//(1)Exception e = new Exception("this is a log");e.printStackTrace();//(2)Thread.currentThread().getStackTrace();//(3)Log.e("dump_test" , Log.getStackTraceString(new Throwable()));(2原创 2021-11-15 17:19:39 · 4881 阅读 · 0 评论 -
C++中容器类详解
STL(Standard Template Library),即标准模板库。STL的一个重要特点是数据结构和算法的分离,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组;STL另一个重要特性是它不是面向对象的;(1)容器顺序容器(1)Vector连续存储结构,每个元素在内存上是连续的;支持高效的随机访问和在尾端插入/删除操作,但其他位置的插入/删除操作效率低下;(2)Deque是“doubl原创 2020-07-28 22:05:44 · 982 阅读 · 0 评论 -
C++中的几种数组:array,vector,valarray
array:STL容器,固定长度,目的为代替内置数组如int a[5] = {1,2};vector:STL容器,支持变长度;valarray:与STL无关,面向数值计算设计,支持数组乘法、加法等;(1)内置数组(C语言风格数组)数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。c++内置的原生数组可以存储一个固定大小的相同类型元素的顺序集合,并且其中的特定元素可以通过索引访问。它由连续的内存位置组成,最低的地址对应第一个元素,最高的地址对应最后一个元素。声明格式如下:type.原创 2020-07-23 16:49:03 · 575 阅读 · 1 评论 -
C++ 中char wchar_t char16_t char32_t的简单区别
首先这几种字符类型的首要区别就是其占用存储空间的大小不同。char 有一个字节表示,wchar_t 宽体字符,由两个字符表示。char16_t,char32_t C++ 11 新增的字符类型,char16_t 占两个字节,char32_t 占四个字节。初始化的方法不同:#include <iostream>#include <string>using namespace std;int main(){ char nameChar[] = "This is a cha原创 2020-07-21 15:40:43 · 4336 阅读 · 3 评论 -
C++中4种类型转换方式
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a。 C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。转换类型操作符作用const_cast去掉类型的const或volatile属性static_cast无条件转换,静态类型转换dynamic_cast有条件转换,动态类型转换,运行时检查类型安全(转换失败返回NULL)reinterpret_cast仅重新解释类型,但没有进行二进制的原创 2020-07-20 14:57:06 · 891 阅读 · 0 评论 -
C++ 11 explicit关键字
在C++中,我们有时可以将构造函数用作自动类型转换函数(构造函数)。但这种自动特性并非总是合乎要求的,有时会导致意外的类型转换,因此,C++新增了关键字explicit,用于关闭这种自动特性。即被explicit关键字修饰的类构造函数,不能进行自动地隐式类型转换,只能显式地进行类型转换。跟它相对应的另一个关键字是implicit,意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。demo1#include <iostream>#include <string>原创 2020-07-17 15:17:43 · 276 阅读 · 0 评论 -
C++ 相关智能指针
智能指针sp/wpAndroid中定义了两种智能指针类型,一种是强指针sp(strong pointer),另外一种是弱指针(weak pointer)。其实称之为强引用和弱引用更合适一些。强指针与一般意义的智能指针概念相同,通过引用计数来记录有多少使用者在使用一个对象,如果所有使用者都放弃了对该对象的引用,则该对象将被自动销毁。弱指针也指向一个对象,但是弱指针仅仅记录该对象的地址,不能通过弱指针来访问该对象,也就是说不能通过弱智真来调用对象的成员函数或访问对象的成员变量。要想访问弱指针所指向的对象,需原创 2020-07-17 11:31:23 · 896 阅读 · 0 评论 -
C++ 函数模板与类模板
1.函数模板函数模板提供了一种函数行为,该函数行为可以用多种不同的类型进行调用,也即是说,函数模板代表一个函数家族。#include<iostream>template<typename T>T max(T const& a, T const& b){ return a<b?b:a;}int main(){ int a =10,b=20; int int_res = ::max(a,b); float c = 1原创 2020-07-16 14:40:12 · 110 阅读 · 0 评论 -
C++ 何时使用引用参数(一些指导原则)
使用引用参数的原因:程序员能够修改调用函数中的数据对象通过传递引用而不是整个数据对象,可以提高程序的运行速度。当数据对象较大时(如结构和类对象),第二个原因最重要,这些也是使用指针参数的原因。这是有道理的,因为引用参数实际上是基于指针的代码的另一个接口。那么什么时候使用引用、什么时候使用指针?什么时候又应该按值传递呢?下面是一些指导原则:对于使用传递值而不做修改的函数:...原创 2019-11-22 14:57:42 · 711 阅读 · 0 评论 -
C++常用获取数组长度方式
1. 算术表达式:#include <iostream>int main() { int arr[4]; std::cout << sizeof( arr ) / sizeof( arr[0] ) << std::endl; // 输出4}或#include <iostream>int main() { i...原创 2019-11-19 14:36:24 · 7011 阅读 · 0 评论 -
C++运算符优先级
C++运算符优先级表原创 2019-11-15 14:15:38 · 1409 阅读 · 0 评论 -
C/C++函数指针与指针函数等区别
(1)函数指针与指针函数(1)函数指针一种特殊的指针,它指向函数的入口;/** 定义一个函数指针p,只能指向返回值为int,形参为两个int的函数*/int (*p)(int,int);/* * 求最大值 * 返回值是int类型,返回两个整数中较大的一个 */ int max(int a, int b) { return a > b ? a : b; } /*原创 2018-01-10 17:40:29 · 6940 阅读 · 2 评论 -
C/C++友元
(1)概念(1)为什么要使用友元在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。即:为了使其他类的成员函数直接访问该类的私有变量,允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函数: (1)运算符重载的某些场合需要使用友元。 (2)原创 2018-01-11 15:00:14 · 406 阅读 · 0 评论 -
C/C++作用域运算符::
::是运算符中等级最高的,它分为三种:全局作用域符,类作用域符,命名空间作用域符全局作用全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分如: char ch; //全局变量 void sleep() { char ch; //局部变量 ch(局部变量) = ch(局部变量) *ch(局部变量) ; ::ch(全局变量)原创 2016-12-26 10:25:53 · 14463 阅读 · 0 评论 -
C/C++创建对象的两种方式
刚学C++肯定被其创建对象搞的糊里糊涂,其不像Java那样直接通过new就可以创建对象了,而且还不需要人为的去回收,但C++却不行其有两种方式创建对象:1、通过new创建类对象CTest* pTest = new CTest();delete pTest;pTest用来接收类对象指针。这种情况可以使用(pTest->成员函数或(*pTest).成员函数)来调用。2、不用new,直接使用类定义申明CT原创 2016-12-24 15:58:49 · 10065 阅读 · 2 评论 -
C/C++ 公有继承、保护继承和私有继承的区别
在c++的继承控制中,有三种不同的控制权限,分别是public、protected和private。定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类是默认public继承,class定义的类是默认private继承。这和Java有很大的不同,Java默认使用public继承,而且只有公有继承。 1.使用public继承时,派生类内部可以访问基类中p原创 2016-12-22 18:44:24 · 1787 阅读 · 0 评论 -
C/C++运算符重载
1、前言今天要和大家分享的是C++的重载运算符,我第一次看到它的感觉是崩溃滴,完全不理解其规则,今天就写一篇文章以作学习记录吧!C++语言中的数据类型分为基础数据类型和构造数据类型,其中基础数据类型可以直接完成算术运算,但是对于构造的数据类型(如对象)就无法直接求和了,我们先来看一个示例。class Complex {private: double a; double b;原创 2017-01-04 16:47:17 · 567 阅读 · 0 评论 -
C/C++函数参数传递机制
C/C++的基本参数传递机制有两种:值传递和引用传递,我们分别来看一下这两种的区别。(1)值传递过程中,需在堆栈中开辟内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。(2)引用传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地原创 2016-12-27 17:33:19 · 661 阅读 · 0 评论 -
C/C++虚函数与虚继承
之前一篇博文我们分析了C++和Java在继承多态方面的一些简单比较C/C++继承类的多态表现,当时我们说到在多态的情况下我们访问的都是父类的行为,那怎样才能访问到子类的函数呢?答案是通过定义虚函数来实现,那今天我们就写一个Demo来看一下。虚函数//测试虚函数class Animal {public: char name[128]; char behavior[128]; /原创 2017-01-05 14:03:17 · 855 阅读 · 0 评论 -
C/C++继承类的多态表现
学过C++和Java的人都知道,他们二者由于都可以进行面向对象编程,而面向对象编程的三大特性就是封装、继承、多态,所有今天我们就来简单了解一下C++和Java在多态这方面的不同。首先我们各看一个案例。C++//测试继承与多态class Animal {public: char name[128]; char behavior[128]; void o原创 2016-12-29 16:14:48 · 3074 阅读 · 2 评论 -
C/C++基类的析构函数为什么要为虚函数
为什么基类的析构函数是虚函数?在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。(1)第一种情况:没有多态,创建派生类对象,基类的析构函数不是虚函数#includeusing namespace std;//基类class ClxBase{public: ClxBase() {}; //析构函数不是虚函数 ~ClxBase原创 2016-12-29 20:42:14 · 802 阅读 · 0 评论 -
C/C++申请和释放内存
new 和 delete 是 C++ 用于管理堆内存的两个运算符,对应于C语言中的 malloc 和 free,但是 malloc 和 free 是函数,而new 和 delete 是运算符。除此之外,new 在申请内存的同时,还会调用对象的构造函数,而 malloc 只会申请内存;同样,delete 在释放内存之前,会调用对象的析构函数,而 free 只会释放内存。C++new运算符申请内存:将调原创 2018-01-11 11:39:47 · 34056 阅读 · 3 评论 -
C/C++静态类和this指针
1、静态类C++的静态成员不仅可以通过对象来访问,还可以直接通过类名来访问。class CBook{public: static double price;//需要通过类外来进行初始化}int main(void){ CBook book; book.price;//通过对象来访问 CBook::price//通过类名来访问 return 0;}静态成员变量原创 2016-12-26 19:34:45 · 1225 阅读 · 0 评论