@okokme
2018-07-23T03:05:17.000000Z
字数 834
阅读 442
c语言
1.指针使得不同区域的代码可以轻易共享内存数据。且字节数较少方便管理(任何类型的指针占用的字节数是一样的,不过根据平台不同,有4字节或者8字节或者其他可能)
2.指针使得一些复杂的链接性的数据结构的构建成为了可能,比如链表,链式二叉树等。
3.有些操作必须使用指针。如操作申请的堆内存还有c语言的一切函数调用中,值传递都是“按值传递“的,如果我们要在函数中修改被传过来的对象,就必须通过之歌对象的指针来完成。
任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址我们就需要指针变量。
指针是程序数据在内存中的地址,而指针变量是用来这些地址的变量
操作系统将RAM等硬件软件结合起来,给程序员提供一种对内存使用的抽象。着用抽象机制使得程序使用的是虚拟存储器,而不是直接操作和使用真实存在的物理存储器。所有的虚拟地址形成的集合就是虚拟地址空间。
也就是说,内存是一个很大的,线性的字节数组(平坦寻址)。每一个字节都是固定的大小,由8个二进制位组成。最关键的是,每一个字节都会有一个唯一的编号,编号从0开始,一直到最后一个字节。如上图这是一个256M的内存,他一共有256×1024*1024=268435456个字节。那么它的地址范围就是 0-268435455。
由于内存中的每一个字节都有一个唯一的编号,因此,在程序中使用的变量,常量,甚至数函数等数据,当他们被载入到内存中后,都有自己唯一的一个编号,这个编号就是这个数据的地址。指针就是这样形成的。
(指针的值一般用16进制表示)
#include <stdio.h>
int main(void)
{
char ch = 'a';
int num = 97;
printf("ch 的地址:%p\n",&ch); //ch 的地址:0028FF47
printf("num的地址:%p\n",&num); //num的地址:0028FF40
return 0;
}