内存类型

地址、指针与引用

假如想象 提交于 2020-01-05 10:30:54
计算机本身是不认识程序中给的变量名,不管我们以何种方式给变量命名,最终都会转化为相应的地址,编译器会生成一些符号常量并且与对应的地址相关联,以达到访问变量的目的。   变量是在内存中用来存储数据以供程序使用,变量主要有两个部分构成:变量名、变量类型,其中变量名对应了一块具体的内存地址,而变量类型则表明该如何翻译内存中存储的二级制数。我们知道不同的类型翻译为二进制的值不同,比如整型是直接通过数学转化、浮点数是采用IEEE的方法、字符则根据ASCII码转化,同样变量类型决定了变量所占的内存大小,以及如何在二进制和变量所表达的真正意义之间转化。而指针变量也是一个变量,在内存中也占空间,不过比较特殊的是它存储的是其他变量的地址。在32位的机器中,每个进程能访问4GB的内存地址空间,所以程序中的地址采用32位二进制数表示,也就是一个整型变量的长度,地址值一般没有负数所以准确的说指针变量的类型应该是unsigned int 即每个指针变量占4个字节。还记得在定义结构体中可以使用该结构体的指针作为成员,但是不能使用该结构的实例作为成员吗?这是因为编译器需要根据各个成员变量的大小分配相关的内存,用该结构体的实例作为成员时,该结构体根本没有定义完整,编译器是不会知道该如何分配内存的,而任何类型的指针都只占4个字节,编译器自然知道如何分配内存。我们在书写指针变量时给定的类型是它所指向的变量的类型

C++指针初学习

巧了我就是萌 提交于 2020-01-04 05:45:21
每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。 #include <iostream> using namespace std; int main () { int var1; char var2[10]; cout << "var1 变量的地址: "; cout << &var1 << endl; cout << "var2 变量的地址: "; cout << &var2 << endl; return 0; } 结果: var1 变量的地址: 0x28fefc var2 变量的地址: 0x28fef2 什么是指针? 指针 是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为: type *var-name; 在这里, type 是指针的基类型,它必须是一个有效的 C++ 数据类型, var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。 int *ip; /* 一个整型的指针 */ double *dp; /* 一个 double 型的指针 */ float *fp; /* 一个浮点型的指针 */ char *ch; /*

地址、指针与引用

岁酱吖の 提交于 2020-01-04 05:39:17
  计算机本身是不认识程序中给的变量名,不管我们以何种方式给变量命名,最终都会转化为相应的地址,编译器会生成一些符号常量并且与对应的地址相关联,以达到访问变量的目的。   变量是在内存中用来存储数据以供程序使用,变量主要有两个部分构成:变量名、变量类型,其中变量名对应了一块具体的内存地址,而变量类型则表明该如何翻译内存中存储的二级制数。我们知道不同的类型翻译为二进制的值不同,比如整型是直接通过数学转化、浮点数是采用IEEE的方法、字符则根据ASCII码转化,同样变量类型决定了变量所占的内存大小,以及如何在二进制和变量所表达的真正意义之间转化。而指针变量也是一个变量,在内存中也占空间,不过比较特殊的是它存储的是其他变量的地址。在32位的机器中,每个进程能访问4GB的内存地址空间,所以程序中的地址采用32位二进制数表示,也就是一个整型变量的长度,地址值一般没有负数所以准确的说指针变量的类型应该是unsigned int 即每个指针变量占4个字节。还记得在定义结构体中可以使用该结构体的指针作为成员,但是不能使用该结构的实例作为成员吗?这是因为编译器需要根据各个成员变量的大小分配相关的内存,用该结构体的实例作为成员时,该结构体根本没有定义完整,编译器是不会知道该如何分配内存的,而任何类型的指针都只占4个字节,编译器自然知道如何分配内存。我们在书写指针变量时给定的类型是它所指向的变量的类型

C++——模板、数组类

拥有回忆 提交于 2020-01-03 10:11:29
1、函数模板: 可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。 声明方法: template<typename 标识符> 函数声明 求绝对值的模板 #include<iostream> ……编译器从调用abs函数时实参的类型,推导出函数模板的类型参数。 using namespace std; ……如该题从调用abs(int)推导出模板中类型参数T为int型。 template<typename T> ……当类型参数的含义确定后,编译器将函数模板为样板,生成一个函数: T abs(T x) …… int abs(int x) { return x<0?-x:x; } ……{return x<0?-x:x;} int main() { int n=-5; double d=-5.5; cout<<abs(n)<<endl; cout<<abs(d)<<endl; }//运行结果:5 5.5 2、类模板: 使用类模板用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括基本类型和自定义类型)。 类模板声明: template <模板参数表> class 类名 {类成员声明} 如果需要在类模板之外定义其成员函数,则要采用 template <模板参数表> 类型名 类名<T>::函数名(参数表)

【数据类型】Java数组详解

孤人 提交于 2019-12-28 16:23:55
数组: 同一种数据类型的元素; 元素以顺序结构依次排列; 在内存中是以一块连续的内存存储; 文章目录 一维数组 静态初始化 二维数组 初始化 元素获取 实例 Array类 相关的错误和异常 一维数组 数组申明 声明格式1: 元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; 【又叫动态初始化】 int [ ] x = new int [ 3 ] ; x [ 0 ] = 1 ; //初始化 x [ 1 ] = 2 ; 声明格式2: 元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; 【又叫静态初始化】 int [ ] x = new int [ ] { 1 , 2 , 3 } ; //初始化 声明格式3: 元素类型[] 数组名 = {元素…}; int [ ] x = { 1 , 2 , 3 } ; //初始化 注意:没有用 new 的申明和初始化必须放在一条语句中; int [ ] arr ; arr = { 1 , 2 , 3 , 4 , 5 } ; //这种是错误的 正确的是: int [ ] arr = { 1 , 2 , 3 , 4 , 5 } ; 注意事项: 如果指定了容量,就不能在后加初始化列表;int[] a=new int[5]{1,2,3,4};这样是错误的; 静态初始化 静态初始化的格式: 数据类型[] 数组名 = new

python面试题

喜夏-厌秋 提交于 2019-12-28 03:52:36
首页 代码 文档 问答 资讯 经验 GitHub日报 | 安卓开发专栏 | 开发者周刊 | Android Studio 使用推荐 | Android开发推荐 登录 注册 www.open-open.com/lib OPEN经验 投稿 全部经验分类 Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim C++ C# JSON Ruby Linux Nginx Docker 所有分类 > 开发语言与工具 > Python开发 关于Python的面试题 Python 2016-01-25 11:02:47 发布 您的评价 : 5.0 收藏 3收藏 来自: https://github.com/taizilongxu/interview_python?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io Table of Contents Python语言特性 1 Python的函数参数传递 2 Python中的元类(metaclass) 3 @staticmethod和@classmethod 4 类变量和实例变量 5 Python自省 6 字典推导式 7

动态内存与智能指针

*爱你&永不变心* 提交于 2019-12-27 21:37:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 1.生命周期 全局对象: 程序启动时分配,程序结束时销毁 局部自动对象: 执行流进入其定义的块时分配,执行流退出其定义的块时销毁 局部static对象: 程序启动时分配(但在其定义的块或作用域内起作用),程序结束时销毁 动态分配的对象: 生命周期与创建地点无关,只有当显示的被释放时,才会被销毁 智能指针:标准库定义,用于管理动态分配的内存,当一个对象应该被释放时,指向它的智能指针可以确保自动的释放它 2.内存分类 静态内存: 用于存储局部static对象、类的static数据成员、全局变量 栈内存: 用于存储局部非static对象 堆内存(内存池): 用于存储动态分配的对象——动态分配的对象,其生命周期由程序控制,例如使用new或delete 3.动态内存 动态内存使用过程中容易产生的问题 内存泄露: 使用后忘记释放内存 引用非法内存: 在尚有指针引用内存的情况下就释放它 使用动态内存的原因: 程序不知道自己需要使用多少对象 程序不知道所需对象的准确类型 程序需要在多个对象间共享底层数据——若两个对象共享底层数据,当某个对象销毁时,我们不能单方面的销毁底层数据 4.智能指针 智能指针和常规指针直接的区别:智能指针能够自动释放所指向的内存(类似java中的垃圾回收机制),而常规指针不能。

Python基础第十天---对象持久化与字符串处理机制

风流意气都作罢 提交于 2019-12-27 03:32:33
文章目录 一、对象持久化 对象持久化必要性 使用格式化文本文件 1文本文件操作 内置函数eval,它可以将读到的字符串转换为Python的表达式,此时可以将他当作Python语句来运行了。 2使用常见的pickle进行对象持久化 序列化到字符串中,再反序列化为原来类型 序列化到二进制文件中,再反序列化为原来类型 3使用常见的shelve进行对象持久化 二、字符串的本质 字符串类型分类 三种类型的转换 bytes字节类型 bytearray字节数组类型,支持原位改变,类似列表类型 概述 三 、UTF-8、ASCII常用字符串编码 ASCII 0-127代码点之间 latin-1为拉丁1字符码 UTF-16 UTF-32 通用可变字长UTF-8,通用性好。 四、字符的编码与解码 编码 解码 字符串默认编码解码 文件读取的编码与解码 字符串BOM处理(字节顺序标记) 一、对象持久化 对象持久化必要性 概论:所有程序运行过程,就是使用我们编写的指令,来调度运算我们特定的数据或数据结构,但这个运算过程在内存里边;我们知道内存不是永久性存储,当我们断电,内存中的状态或数据就会丢失,当然在实际计算可能需要将当前需要计算的某个数据结果永久存储起来,就要用到对象的持久化。如:玩游戏过关时,这个状态是在内存中表现的,若想明天接着玩,我们可以把当前进度保存一下

go基础之--函数和map

我的未来我决定 提交于 2019-12-27 00:29:46
在整理函数之前先整理一下关于指针 指针 普通类型变量存的就是值,也叫值类型。指针类型存的是地址,即指针的值是一个变量的地址。 一个指针指示值所保存的位置,不是所有的值都有地址,但是所有的变量都有。使用指针可以在无序知道 变量名字的情况下,间接读取或更新变量的值。 获取变量的地址,用&,例如:var a int 获取a的地址:&a,&a(a的地址)这个表达式获取一个指向整形变量的指针,它的类型是整形指针(*int),如果值叫做p,我们说p指向x,或者p包含x的地址,p指向的变量写成 *p ,而*p获取变量的值,这个时候*p就是一个变量,所以可以出现在赋值操作符的左边,用于更新变量的值 指针类型的零值是nil 两个指针当且仅当指向同一个变量或者两者都是nil的情况才相等 通过下面小例子进行理解指针: 1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func test() { 8 x := 1 9 // &x 获取的是变量x的地址,并赋值给p,这个时候p就是一个指针 10 p := &x 11 // p是指针,所以*p获取的就是变量的值,指针指向的是变量x的值,即*p为1 12 fmt.Println(*p) 13 // 这里*p 进行赋值,也就是更改了变量x的值,即实现不知道变量的名字更改变量的值 14 *p = 2 15 fmt.Println

12-26学习随笔:指针和内存

爱⌒轻易说出口 提交于 2019-12-26 23:40:44
12-26学习随笔:指针和内存 内存: 系统存储空间,32位系统通常为8个字节的内存地址 指针: 指针是一个变量,如同int a 类似,指针存储内容为地址。 如申明 int p; 那么变量为p,而不是 p; 指针声明: 指针变量的数据类型用来指定该指针所指向变量的类型(指针类型和所指向的变量类型相同): char *p; int *p; float *p; 空指针可以指向任意类型,执行指向类型后将强制转换: void *p; 指针赋值: 初始化赋值: int a=100; int *p=&a; 后期赋值 int a=100; int p; p=&a; 指针基本使用: 指针所指向地址+1: p+=1; 对于32位系统,指针+1代表内存地址+4(4 8); 取指向地址的值: int b; b=*p; 来源: CSDN 作者: 后海看海 链接: https://blog.csdn.net/liujieupup/article/details/103720622