指针变量

运行时类型识别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(); // 析构函数

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个字节

C和指针

眉间皱痕 提交于 2020-03-16 20:23:01
1.指针数据类型 变量的值存储于计算机的内存中,每个变量占据一个特定的位置,每个内存位置都由地址唯一确定并引用。指针只是 地址的另一个名字罢了。指针变量就是一个其值为另一个内存地址的变量。 1.1 指针常量 指针常量与非指针常量在本质上是不同的,因为编译器负责把变量赋值给计算机内存中的位置,程序员事先无法知道某个特定的变量将存储到内存的哪个位置。因此,你通过操作符获得一个变量的地址而不是直接把它的地址写成字面值常量的形式。事实上,当一个函数每次被调用时,它的自动变量(局部变量)可能每次分配的 内存位置都不相同,因此把指针常量表达为数值字面值的形式几乎没有用处,所以C语言内部没有特地定义这个概念。 1.2 static关键字 当用于不同的上下文环境时,static关键字具有不同的意思。 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal。但标识符的存储类型和作用域不受影响。用这种方式声明的函数或变量只能在声明它们的源文件内访问。 当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一直存在,而不是每次在代码块开始执行时创建,在代码块执行完毕后销毁。 来源:

c++ 引用 指针。

為{幸葍}努か 提交于 2020-03-16 12:18:12
一、什么是引用(reference) ?已经存在的对象的另外一个名字。   引用有什么不同的?     1.引用在定义时,以&开头。     2.引用不是对象,只能绑定在对象上。所以必须在初始化的时候,指定引用绑定的对象。而且引用绑定是不可以改变的。       int val = 0;       int &refVal = val; // 不允许 int &refVal; 这样初始化     3.就像使用变量名一样,对引用赋值,实际上是给该引用绑定的对象赋值,获取引用的值,也同样是获取与该引用绑定的对象的值。       int &refVal2 = refVal ;// refVal2绑定到了val上面。       int copyVal = refVal; // 初始化copeVal为val的值。 二、什么是指针(pointer)? 存放着某个对象所在地址的 对象 。   和引用的区别是,指针可以被更改。不必须初始化,尽管一般会初始化。   1.指针在定义时,以*开头。赋值时需要使用取地址符(&)来得到某个对象的地址。 在C++中,相同的符号,在不同的情况使用,意义不同,就像不同的符号。     int val = 0;     int *p = &val; //p存放val的地址, 即 p是指向val的指针。指针类型一般必须和指向的对象类型完全一致。   2

c语言第三次作业

萝らか妹 提交于 2020-03-16 09:00:30
观看视频1.2.2,1.3.1,1.3.2 1、视频笔记 2、编写程序代码列表 3、存在的问题: (1)分不清scanf函数与gets函数的区别 解决方法:通过查阅课本,明白scanf函数不能读入空格或Tab,而gets函数可以。 (2).判断:语句 int *p 和 printf("%d",*p); 中的*p含义相同。(F) 解析:前者表示指针变量,后者表示指针变量储存的地址。 来源: https://www.cnblogs.com/jhy12/p/12501725.html

深入理解计算机系统之程序的机器级表示部分学习笔记

那年仲夏 提交于 2020-03-16 08:08:11
不论我们是在用C语言还是用JAVA或是其他的语言编程时,我们会被屏蔽了程序的机器级的实现。机器语言不需要被编译,可以直接被CPU执行,其执行速度十分 快。但是机器语言的读写性与移植性较高级语言低。高级语言被编译后便成为了汇编语言,汇编语言 十分接近 机器语言。之后汇编代码会转化为机器语言。虽然现代 的编译器能帮助我们将高级语言转化为汇编语言,解决了不少问题,但是对于一个严谨的程序员来说,需要做到能够阅读和理解汇编语言。我们主要围绕Intel来讲 解。 一 Intel处理器的历史演变 Intel处理器最的早是8086, 它是 十六 位的微处理器,作为第一代单芯片,8086知名度是相当的高。之后又有80286、i386、i486、Pentium、PentiumPro、 Pentium/MMX、PentiumⅡ、PentiumIII等等的一系列处理器出现了。每个时间上相继的处理器都是向后兼容的。Intel称其指令集为IA32,也就是Intel32位体系结 构,也就是我们平常所说的x86。 二 程序编码 我们写一个C程序,用Unix命令行编译p1.c和p2.c两个文件。即为 unix> gcc -02 -o p p1.c p2.c 其 中 -02 告诉编译器使用第二级优化。而二级优化则是在性能优化与使用方便之间一个最好的权衡。所以代码经常使用二级优化。 (1)机器级代码

container_of宏剖析

我的未来我决定 提交于 2020-03-16 06:45:14
container_of宏剖析 //该宏位于include/linux/kernel.h 1.定义格式 /** * container_of - cast a member of a structure out to the containing structure * * @ptr: the pointer to the member. * @type: the type of the container struct this is embedded in. * @member:the name of the member within the struct. * */ #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) 作用:就是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。 例: struct demo_struct { type1 member1; type2 member2; type3 member3; } struct demo_struct demo1,*pdemo; type2 *

Golang 入门 : 数组

柔情痞子 提交于 2020-03-16 03:06:46
数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如 int、string 等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在 Golang 中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说 [5]int 和 [10]int 是两个不同的类型。Golang 中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。 本文将介绍 Golang 数组的基本概念和用法,演示环境为 ubuntu 18.04 & go1.10.1。 Golang 数组的特点 我们可以把 Golang 数组的特征归纳为以下三点: 固定长度 :这意味着数组不可增长、不可缩减。想要扩展数组,只能创建新数组,将原数组的元素复制到新数组。 内存连续 :这意味可以在缓存中保留的时间更长,搜索速度更快,是一种非常高效的数据结构,同时还意味着可以通过数值的方式(arr[index])索引数组中的元素。 固定类型 :固定类型意味着限制了每个数组元素可以存放什么样的数据,以及每个元素可以存放多少字节的数据。 数组是个固定长度的数据类型,其长度和存储元素的数据类型都在声明数组时确定,并且不能更改。如果需要存储更多的元素,必须先创建一个更长的数组

C语言字符串中的指针与数组

≡放荡痞女 提交于 2020-03-15 21:52:56
先说一下字符串字面量(字符串常量):双引号中的字符和编译器自动加入末尾的\0字符,都作为字符串储存在内存中。字符串常量属于静态存储类别,说明如果在函数中使用字符串常量,该字符串只会储存一次,在整个程序的生命周期内存在,即使函数被调用多次。用双引号扣起来的内容被视为指向该字符串储存位置的指针。 字符串的赋值可以用指针与数组,请看下面的例子 char str1[] = "I am a student"; const char *str2 = "I am a student too"; 以上两种表示方法还是有一些不同的 先说数组表示法,数组形式str1[]在计算机的内存中分配一个内含15个元素的数组(末尾还要加上空字符'\0'),当程序载入内存时,也载入了程序中的字符串,字符串存储在静态存储区中,但是当程序在开始时才会为该数组分配内存,此时才将字符串拷贝到数组中,注意此时字符串有两个副本,一个是静态存储区中的常量,另一个是存储在数组中的字符串。str1为首元素的地址(&str1[0]),是常量地址,不能更改,可以进行str1+1(&str1[1]),但是不允许str++这样的操作,因为递增运算符只能对变量名进行运算。 指针形式(*str2)也使得编译器为字符串在静态存储区预留19个元素空间,一旦开始执行程序,它会为指针变量str2流出一个储存位置,并把字符串的地址储存在指针变量中