在电脑内存中的每个字节都有一个编号(地址),也就是说地址指向了某个字节数据。
指针和地址的最大区别就是指针是有类型的,地址是没有类型的。可以根据指针类型决定访问字节数量。
什么是指针:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。
假如程序中有一块内存:
可以看到 0x00DDF640 和 0x00DDF644 他们之间相差 4 , 而他们中间相差4个字节。
因此 48 的地址是0x00DDF640,23 的地址是0x00DDF644,
可以判断 48 后边 f6 的地址是 0x00DDF641
dd 的地址是 0x00DDF642 , 00 的地址是 0x00DDF643 。也就证明了 每个字节都有一个地址。
地址 0x00DDF640 起始位置有4个字节数据可以把他看成一个整数指针类型(32位程序中指针类型占4个字节)这个里访问4个字节 : 48 f6 dd 00 ,(因大小端模式,需将数据反过来看)也就是 00 dd f6 48 ,0x00DDF640 代表一个指针,00 dd f6 48是这个指针指向的地址).
假如有一个文本型变量 str = "hello word" ,而 变量 str 也就是地址 0x00DDF640 ,str的值是 0x00DDF648 , “hello word”所在的地址就是0x00DDF648 (str 的值指向的地址)
例如:
用CE查看程序内存,在代码中 定义了一个p的字符串变量赋值(指针) hello word。然后输出 这个变量的地址: 0000002B7611F568,可以看到这个地址的值是: 00007FF6B2D44F00 也是一个地址
转到这个地址 就可以看到 hello word.
代码中 p 的地址存放的是hello word这个字符串的起始地址。地址就是一个字节在内存中的编号,指针也有一个地址.但这个地址中的值存放的是另一个地址。
*注:图中和代码和火山的文本型有所不同
附上源码: 示例源码