指针

指针和动态数组 new ,delete

纵然是瞬间 提交于 2020-03-17 06:58:15
............心中要有一内存块,以便理解知识 计算机储存数据必须知道数据的3种属性: 1.存储在何处.......并起名 2.值 3.类型 (1)int a;a=30; (2)int *b=&a; (3).int *a,b;注意...整型....指针a,整型...变量b,对每个指针都要有一个*; .......................指针.......................................... 1.指针是一个变量,存储的是...值的地址,而不是值本身, 指针变量 是指向特定变量类型指针,和数组相似 ..int* tax;...............指向int变量的指针,又叫整型指针 ..double * str;.............指向double变量的指针 ..int 指针和double指针虽然指向的数据类型不同, 但这两个变量本身长度的通常是一样的,好比1016可能是超市的地址,也可能是,村庄的地址一样,.....地址的长度或值,不能指示该地址上有什么建筑物,也不指示有关变量的长度或类型的任何信息 .显示地址,cout常用16进制 .......................指针与c++原理.......................................... oop强调的是运行阶段进行决策; 如

运行时类型识别RTTI

拟墨画扇 提交于 2020-03-17 05:39:22
1、什么是RTTI? RTTI:Run-Time Type Identification 运行时类型识别 程序在运行时能够使用 基类 的 指针 或引用来检查这些指针或引用所指的对象的实际的派生类。 在这里要用到两个C++中的关键字: typeid 和 dynamic_cast 2、typeid typeid是C++中一个用来获取变量类型的关键字,用法跟使用函数一样 typeid(xxx) typeid注意事项: (1)typeid返回的是一个 type_info 对象的引用,而这个引用是与具体的变量类型有关的, 也就是说不同的变量类型都有一个 type_info 结构体。type_info结构体如下: class type_info{ public: const char* name() const; // 打印具体类型的方法 一般这样用 typeid(x1).name() bool operator==(const type_info& rhs) const; // 运算符重载 支持直接 typeid(x1) == typeid(x2) bool operator!=(const type_info& rhs) const; // 运算符重载 int before(const type_info& rhs) const; virtual ~type_info(); // 析构函数

RTTI(运行时类型识别)

空扰寡人 提交于 2020-03-17 05:37:50
   运行时类型识别(Run-time type identification , RTTI) ,是指在只有一个指向基类的指针或引用时,确定所指对象的准确类型的操作。其常被说成是C++的四大扩展之一(其他三个为异常、模板和名字空间)。 使用RTTI的两种方法:    1、typeid()   第一种就像sizeof(),它看上像一个函数,但实际上它是由编译器实现的。 typeid() 带有一个参数,它可以是一个对象引用或指针,返回全局 typeinfo类 的常量对象的一个引用。可以用运算符“= =”和“!=”来互相比较这些对象,也可以用 name() 来获得类型的名称。如果想知道一个指针所指对象的精确类型,我们必须逆向引用这个指针。比如: #include <typeinfo> #include <iostream> #include <cmath> using namespace std; class Shape { public : int area(float r) { float s=3.14*pow(r,2); return s; } }; int main() { Shape* shape=new Shape; cout<< typeid(*shape).name()<<endl; system("pause"); }   运行结果为:   为了保持一致性,typeid

RTTI 运行阶段类型识别

空扰寡人 提交于 2020-03-17 05:37:06
RTTI是运行阶段类型识别 C++有3个支持RTTI的元素 dynamic_cast 如可能,使用一个指向基类的指针生成派生类指针,否则返回空指针 typeid 返回一个指出对象类型的值 type_info 结构存储了有关特定类型的信息 * 只能将RTTI用于包含虚函数的类层次结构 dynamic_cast<Super *>(pg); //pg是否能够安全的转换为Super * 如果可以,返回pg对象的地址,否则返回空指针 # 将其用于引用时,因为没有与空指针对应的引用值,因此无法使用特殊的引用值指示失败,当请求不正确时,将引发 bad_cast 异常 (从exception类派生,位于头文件typeinfo中) typeid运算符和type_info类 typeid运算符能确定两个对象是否为同种类型, 接受 类名 和 结果为对象的表达式 两种类型 返回一个type_info 对象的引用 type_info 在头文件typeinfo 中,重载了== 和 != 运算符,以便比较 typeid(Super) == typeid(*pg) //如果pg指向Super对象,值为true,否则为false 如果pg 是空指针,引发 bad_typeid 异常 (从exception类派生,位于头文件typeinfo中) type_info 包含一个name() 成员

C和指针 第一二章 基本概念

痴心易碎 提交于 2020-03-17 05:21:13
第一二章 基本概念 第一章编程练习 1.编写一个程序,从标准输入读取几行输入,每行输入都打印在标准输出上,并加上行号。 #include <studlib.h> int main () { int col=1;//列号 int line=0;//行号 int ch;//存储输入 while((ch=getchar()) != EOF)// 读取字符并逐个处理,EOF是标准结束符 { if(col==1) { col=0; line++; printf("%d:",line); } putchar(ch); if(ch=="\n") { col=1; } } return EXIT_SUCCESS; } #include <stdio.h> #include <stdlib.h> int main() { int col=1;//列号 int line=0;//行号 int ch;//存储输入 signed char checksum =-1; while((ch=getchar())!= EOF)// 读取字符并逐个处理,EOF是标准结束符 { if(col==1) { col=0; line++; printf("%d:",line); } putchar(ch); checksum+=ch; if(ch=='\n') { col=1; printf("%d\n"

B树,B+树,B*树简介

限于喜欢 提交于 2020-03-17 03:00:15
B树(有些人也叫B-树) 是一种多路搜索树 : 1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3.除根结点以外的非叶子结点的儿子数为[M/2, M]; 4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字) 5.非叶子结点的关键字个数=指向儿子的指针个数-1; 6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1]; 7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的 子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树; 8.所有叶子结点位于同一层; 如:(M=3) B树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果 命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为 空,或已经是叶子结点; B树的特性: 1.关键字集合分布在整颗树中; 2.任何一个关键字出现且只出现在一个结点中; 3.搜索有可能在非叶子结点结束; 4.其搜索性能等价于在关键字全集内做一次二分查找; 5.自动层次控制; 由于限制了除根结点以外的非叶子结点,至少含有M/2个儿子,确保了结点的至少 利用率,其最底搜索性能为: 其中

iOS开发之深复制和浅复制

Deadly 提交于 2020-03-17 01:44:55
某厂面试归来,发现自己落伍了!>>> 非盈利无广告开发者专用网址导航:www.dev666.com 1 、概述 对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的 指针 ;深复制是直接拷贝 整个对象 内存到另一块内存中。 如下图: 再简单些说: 浅复制就是指针拷贝;深复制就是内容拷贝。 2 、集合的浅复制 (shallow copy) 集合的浅复制有非常多种方法。当你进行浅复制时,会向原始的集合发送retain消息,引用计数加1,同时指针被拷贝到新的集合。 现在让我们看三个浅复制的例子: NSArray *shallowCopyArray = [someArray copyWithZone:nil]; NSSet *shallowCopySet = [NSSet mutableCopyWithZone:nil]; NSDictionary *shallowCopyDict = [[NSDictionary alloc] initWithDictionary:someDictionary copyItems:NO]; 2 、集合的深复制 (deep copy) 集合的深复制有两种方法。 方法一: 可以用 initWithArray:copyItems: 将第二个参数设置为YES即可深复制,如 NSDictionary

golang: 利用unsafe操作未导出变量

心不动则不痛 提交于 2020-03-17 01:29:17
某厂面试归来,发现自己落伍了!>>> 看了 @喻恒春 大神的利用unsafe.Pointer来突破私有成员,觉得例子举得不太好。而且不应该简单的放个demo,至少要讲一下其中的原理,让看的童鞋明白所以然。see: http://my.oschina.net/achun/blog/122540 unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对象,uintptr类型的目标会被回收。golang的unsafe包很强大,基本上很少会去用它。它可以像C一样去操作内存,但由于golang不支持直接进行指针运算,所以用起来稍显麻烦。 切入正题。利用unsafe包,可操作私有变量(在golang中称为“未导出变量”,变量名以小写字母开始),下面是具体例子。 在$GOPATH/src下建立poit包,并在poit下建立子包p,目录结构如下: $GOPATH

Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter

假如想象 提交于 2020-03-17 01:19:52
今天第一次写博客,做小的demo发现的空指针的问题,耽误挺长的时间 正确的是 因为他两的位置写反了,一定要把findByViewId写前面。要先给变量赋值你才能调用listview对象的方法,不然就是在调用空对象,就直接报空指针了 还有图片一定要放在drawable下面的,不要drawable-v24下面 map.put("img",utils.index_menu_img[i]); 跟着别人敲代码,没有[i] ,显示不出图片L,java map.put("txt",utils.index_menu_txts[i]); 来源: CSDN 作者: dingxiaofeng66 链接: https://blog.csdn.net/dingxiaofeng66/article/details/104906059

IOS笔记-C语言中的字符串数组 指针

南楼画角 提交于 2020-03-16 21:46:09
1、字符串 用“”引起来的内容,就是字符串。 在C语言中有没有专门的字符串的变量? 没有 所以我们使用字符数组来存储字符串。(把字符串的每一个字符存储到字符数组的每一个元素中,并且会多存放一个‘\0’) '\0' 字符串的结束标记,ascII码表中值是 0 对应的字符。NUT,NULL 2、字符数组 1)定义 char 数祖名[长度]; char str[200]; 表示定义一个长度为200的字符数组,如果用来存储字符串,则字符串的最大长度是199,留出一个给'\0' char str[3]={'a','b','c'}; //不能以%s进行输出 2)初始化 (1)完全初始化 char str[3]={'a','b','c'}; (2)部分初始化 char str[3]={'a','b'}; (3)用字符串进行初始化 char str[10]="itcast"; //占用了7个字节因为'\0'占用了一个 char str[10]={"itcast"}; 3)字符数组的引用 如果把字符数组的内容逐个取出,str[0]、str[1]....str[n-1]; %s 字符串的格式控制符把字符数组整体进行输出 %s 给一个字符数组的首地址,系统会自动从首地址开始连续读取直到遇到'\0'结束 4)存储细节 字符数组存储的细节: 连续的一片存储区域(地址是连续的),每个字符占用1个字节