指针的本质:表示内存地址的数据类型

在典型的32位平台上,可以把内存空间看成是由很多个连续的小房间构成的,每个 房间就是一个小存储单元,大小是1个字节,房间中住着数据。有的数据比较小,比如一个char类型的字符,它只需要一个房间就够了。而有的数据比较大,就 需要占用好几个房间,比如一个int类型的整数,其大小是4个字节,需要4个房间才可以安置。为了方便找到住在这些房间中的数据,房间就需要按照一定的规 则编号,这个编号,就是通常所说的内存地址。这些编号是用一个32位的二进制数来编码的,比如0x7AE4074B、0xFFFFFFFF等,如图3-6 所示。一旦知道某个数据的房间编号,就可以通过这个编号来对相应房间中的数据进行存取操作。C++中为了灵活地操作内存,特别内建了一种特殊的数据类型, 以用来存放内存单元的地址,这就是指针。而存放在指针中的内存地址,则可能是一个对象的地址、一个整数的地址,甚至是一个函数的地址。一般来说,如果指针 变量所保存的是一个对象或者函数的地址,就说这个指针指向这个对象或者函数。

内存被划分为许多小的单元房间

时间: 2024-11-04 23:52:57

指针的本质:表示内存地址的数据类型的相关文章

c语言中通过指针将数值赋值到制定内存地址

1.一种直观的方法 假设现在需要往内存0x12ff7c地址上存入一个整型数0x100.我们怎么才能做到呢? 我们知道可以通过一个指针向其指向的内存地址写入数据,那么这里的内存地址0x12ff7c其本质不就是一个指针嘛.所以我们可以用下面的方法: int *p = (int *)0x12ff7c; *p = 0x100; 需要注意的是将地址0x12ff7c赋值给指针变量p的时候必须强制转换. 1.1 为什么在此处,我们敢往0x12ff7c这个地址赋值呢? 至于这里为什么选择内存地址0x12ff7c

Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型,函数之内的 我们先来看一张传播久远的图片' 一.各种数据类型介绍 整型 整形包括短整型.整形和长整形. 短整形 short a=1; 整形 一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值范围是-2147483648~2147483647,在内存中的存储顺序是地位在前.高位在

理解C指针: 一个内存地址对应着一个值

一个内存地址存着一个对应的值,这是比较容易理解的. 如果程序员必须清楚地知道某块内存存着什么内容和某个内容存在哪个内存地址里了,那他们的负担可想而知.    汇编语法对"一个内存地址存着一个对应的数",作了简单的"抽象":把内存地址用变量名代替了,对内存地址的取值和赋值方式不变.    c语言对此进行了进一步的抽象:变量 <==> (一个内存地址,对应的值)(这里忽略类型等信息). 把C语言中的基本类型(int,long,float等),指针,数组等还原

指针和数组及内存管理

1. 指针和地址 TCPL 中给指针的定义是: A pointer is a group of cells (often two or four) that can hold an address . int value = 10; int *pvalue = &value; 上面这个语句的内存模型是: 注意: &(取地址)操作符只对内存中存在的对象起作用,如变量和数组类型.不能对表达式,常量和寄存器变量使用取地址操作. *(析取)操作符应用于一个指针变量时,取得这个指针变量所指向的对象.

C++中关于new及内存地址的思考

OJ题刷多了,每次都是直接分配内存,那么,你还记得怎么动态分配内存吗? ———————————————————————————————————— 我们知道,使用malloc/calloc等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即是检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的.但是,如果你简单的把这一招应用到new上,那就不一定正确了. C++里,如果new分配内存失败,默认是抛出异常的.如果你想检查new是否成功,应该捕捉异常. try{ int*

指针的本质

变量回顾 程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间? 思考 下面的程序输出什么?为什么 int i = 5; int* p = &i; printf("%d,%p\n",i,p); *p = 10; printf("%d,%p\n",i,p); *号的作用 在指针声明时,*号表示所声明的变量为指针 在指针使用时,*号表示取指针所指向的内存空间中的值 例子1:指针使用分析 #include<stdio.h>

指针的本质分析

*号的意义 在指针声明时,*号表示所声明的变量为指针 在指针使用时,*号表示取指针所指向的内存空间中的值 指针是变量,因此可以声明指针参数 当一个函数体内部需要改变实参的值,则需要使用指针参数 函数调用时实参值将复制到形参 指针适用于复杂数据类型作为参数的函数中 const int* p; //p可变,p指向的内容不可变 int const* p; //p可变,p指向的内容不可变 int* const p; //p不可变,p指向的内容不可变 const int* const p; //p和p指向

C语言随笔3:指针定义、数据在地址中的大小端排列

指针变量:用于存放另一个变量的地址 (指针变量所占空间大小由操作系统决定32/64位  4/8字节 声明且定义:int  *p=&a: 声明.定义:int  *p: p= &a: Double *p =d: (int)(p+1)-(int)p = 8: P指针变量所代表地址 指向 double类型变量,所以p+1,是在double基础上,偏移8个字节地址. 不同类型的指针的区别:就在于+1始偏移量的不同.本质 都三 超过1字节地址存放的变量,按照大小端格式在内存地址中排列 若p = 0x0

C语言:内存地址分析 &amp; sizeof和strlen用法总结

还是在大学时代接触的C语言,当时学习数组.指针等概念时,怎一个"晕"字了得.最近在学习之余,疯狂地恶补了相关知识,故总结之,如有错误,请大家多多指点. 一. 内存地址分析 1) 先来看一个最基础的例子: int a[4]; 提问:&a[0],  a,  &a,  a+1,  &(a+1),  &a+1 分别表示什么? 咋一看,真的不知所措: 我们可以图解来分析它(假设下面的操作均在32为系统上面). 先来对上图进行简单的说明工作: 1. 紫色区域就是数组