在电脑内存中的每个字节都有一个编号(地址),也就是说地址指向了某个字节数据。 指针和地址的最大区别就是指针是有类型的,地址是没有类型的。可以根据指针类型决定访问字节数量。 什么是指针:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。 假如程序中有一块内存: 可以看到 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这个字符串的起始地址。地址就是一个字节在内存中的编号,指针也有一个地址.但这个地址中的值存放的是另一个地址。 *注:图中和代码和火山的文本型有所不同 附上源码: 示例源码 |