指针(笔记1)一

简介: 本文介绍了计算机内存和地址的基本概念。内存由存储单元组成,每个单元有唯一地址,内存地址是无符号整数。在32位系统中,地址空间为4GB。内存被划分为字节单元,每个变量在内存中占据特定长度的空间,例如字符占1字节,整型占4字节。指针是存储变量地址的变量,通过取地址操作符(&)获取变量的地址。指针变量需要先赋值才能使用,并且只能指向定义时的变量类型。

一、内存和地址


内存及其管理方法:


1.计算机主存储器由一个一个存储单元组成,微型计算机以字节作为存储单元


2.内存区的每一个字节有一个唯一的编号,这就是“地址”,它相当于教学楼中的教室号


3.内存地址,是一个无符号整数(unsigned int) , 它是一个以当前系统寻址范围为取值范围的整数


4.主存储器的所有存储单元的地址是连续的


5.在32位系统下,由于使用的是32位地址,其寻址能力也就是地址空间为4G的字节,0-2的32次方-1


内存被划分为一个个的单元,一个内存单元的大小是一个字节


注意:内存单元的地址与内存单元中的数据是两个完全不同的概念


二、指针:


1.在程序中定义了一个变量,对程序进行编译时,系统会给这个变量分配内存单元


2.编译系统根据程序中定义的变量类型,分配一定长度的空间:


每个字符变量分配1个字节


每个整型变量分配4个字节


3.一个变量占用存储区域的所有字节都有各自的地址,C系统把该变量在存储区域中第一个字节的地址作为此变量的地址


4.由于通过地址可以找到所需的变量单元,可以说, 地址指向该单元,将地址形象化的称为指针



内存单元的编号=地址=指针





三、编址:



32位机器有32根地址总线,每根线只有两态,表示0,1【电脉冲有/无】,那么一根线,就能表示2种含义,2根线就能表示4种含义,依次类推。32根地址线,就能表示2^32种含义,每一种含义都代表一个地址


地址信息被下达给内存,在内存上,就可以找到该地址对应的数据,将数据在通过数据总线传入CPU内寄存器。


四、取地址操作符(&)


在C语言中创建变量其实就是向内存申请空间



上述的代码就是创建了整型变量a,内存中申请4个字节,用于存放整数10


取地址操作符(&)的使用:



这里%p是专门用于打印地址的



结果是以16进制的形式输出的


虽然整型变量占用4个字节,我们只要知道了第一个字节地址,顺藤摸瓜访问到4个字节的数据也是可行的。


五、指针变量的定义和引用操作符(*)


如: int* pl,*p2;

 

与int *pl, p2;


int* 表示指向整型数据的指针类型,读作"指向int的指针"或简称"int指针"


指针变量名是pl,p2,不是*pl,*p2


指针变量只能指向定义时所规定类型的变量


指针变量定义后,变量值不确定,应用前必须先赋值



第五行中: *是在说明pa是指针变量

             

               int表示pa指向的对象是int类型的


再比如:char* pc=&ch;                                     则表示有一个char类型的变量ch,ch的地址存放在指针变量pc中


pa是指针变量,是专门用于存放地址的,地址又被称为指针,指针变量是用来存放指针的

指针变量也是一种变量,只要是存放在指针变量中的值都会被理解为地址



指针(笔记1) 二+https://developer.aliyun.com/article/1519983?spm=a2c6h.13148508.setting.18.5c984f0e9ej6IA

 

目录
相关文章
|
存储 C++
【指针笔试题的笔记】
【指针笔试题的笔记】
43 0
|
算法 编译器 C++
类与对象知识总结+封闭类+const+this指针 C++程序设计与算法笔记总结(三) 北京大学 郭炜(中)
类与对象知识总结+封闭类+const+this指针 C++程序设计与算法笔记总结(三) 北京大学 郭炜(中)
69 0
|
存储 算法 编译器
类与对象知识总结+封闭类+const+this指针 C++程序设计与算法笔记总结(三) 北京大学 郭炜(上)
类与对象知识总结+封闭类+const+this指针 C++程序设计与算法笔记总结(三) 北京大学 郭炜(上)
53 0
|
7月前
|
C++
指针(笔记2)一
本文介绍了C++中`const`关键字修饰指针的两种情况:当`const`位于星号(*)左侧时,它限制指针所指向的内容不可修改,但指针自身可变;当`const`位于星号(*)右侧时,它限制指针变量不可改变,但可通过该指针修改其指向的内容。此外,文章还讨论了指针的基本运算,包括指针加减整数(用于遍历数组),指针减指针(计算两者间元素个数)以及指针的关系运算(在循环中控制指针移动)。
45 1
|
7月前
|
人工智能 C++
指针习题笔记(较难,可用于思维锻炼)
指针习题笔记(较难,可用于思维锻炼)
36 4
|
7月前
|
程序员 编译器 C语言
指针(笔记2)二
这篇内容主要讲解了指针和野指针的概念以及如何避免野指针的问题。野指针是指针未初始化、越界访问或指向已释放内存的情况。避免野指针的方法包括初始化指针、避免指针越界和在不再使用时将指针设为NULL。此外,文章提到了`assert`断言在调试中的作用,它可以帮助检测程序运行时的错误条件。最后,讨论了函数调用中的传值调用和传址调用,指出传址调用允许函数直接修改实参变量的值。
37 0
|
7月前
|
存储 编译器
指针(笔记1) 二
这篇内容介绍了指针的相关概念,包括解引用操作符、指针变量的大小、指针的解引用、指针加整数以及void*指针的使用。解引用操作符允许通过指针访问和修改变量,指针变量的大小取决于地址总线的宽度(32位系统为4字节,64位系统为8字节)。指针加整数时,不同类型的指针会按相应类型大小移动。void*指针可以存储任何类型的数据地址,但不能直接解引用或进行指针运算,通常用于函数参数以实现泛型编程。最后强调了指针变量应指向相同类型的变量,并在类型不匹配时进行强制转换。
37 0
|
7月前
|
C语言
C语言(指针详解)重点笔记:指针易错点,都是精华
C语言(指针详解)重点笔记:指针易错点,都是精华
82 0
|
缓存 算法 安全
类与对象知识总结+封闭类+const+this指针 C++程序设计与算法笔记总结(三) 北京大学 郭炜(下)
类与对象知识总结+封闭类+const+this指针 C++程序设计与算法笔记总结(三) 北京大学 郭炜(下)
54 0
|
存储 安全 数据安全/隐私保护
骚操作:隐藏代码到数据区,函数指针【滴水逆向三期37笔记】
骚操作:隐藏代码到数据区,函数指针【滴水逆向三期37笔记】