资讯详情

资讯详情

C.6指针(1)

1.前置知识1.1内存和地址CPU在处理数据的时候需要的数据是在内存中读取的处理后的数据也会放回内存中管理内存实际就是把内存划分为一个个的内存单元每个内存单元的大小取1个字节。一个字节空间里面能放8个比特位。每个内存单元也都有一个编号有了这个内存单元的编号CPU就可以快速找到一个内存空间。在计算机中我们把内存单元的编号称为地址C语言中给地址起了新的名字叫指针。一个字节的空间就有一个编号地址\指针1.2理解编址CPU访问内存中的某个字节空间必须知道这个字节空间在内存的什么位置而因为内存中字节很多所以需要给内存进行编址。计算机中的编址并不是把每个字节的地址记录下来而是通过硬件设计完成的。变量创建的本质是在内存中申请空间2.指针变量和地址2.1指针变量int main() { int a 10; //a;// -- 取地址操作符取出的是a的地址 //printf(%p\n, a); int* p a;//p就是指针变量指针变量就是用来存放地址的变量 return 0; }2.2如何拆解指针类型int main() { int a 10; int* p a; return 0; }int *中的int说明p指向的对象是int类型的*表示p是一个指针变量。2.3解引用操作符int main() { int a 100; int* p a; printf(%d\n, *p);//*是解引用操作符 *p 10; printf(%d\n, a); return 0; }* p的意思是通过p里边存放的地址找到p指向的对象也就是a所以*p就是a2.4指针变量的大小指针变量的大小取决于存放的是什么地址地址的存放需要多大的空间地址变量的大小。32位的机器上地址是32个bit位需要4个字节的空间才能存储“4个字节的空间”即为指针变量的大小。64位机器上地址是64个bit位存储的话需要8个字节指针变量的大小是8个字节。X64 表示是64位环境编译出的程序是64位程序。不管是什么类型的指针变量都是8个字节。X86 表示是32位环境编译出的程序是32位程序。不管是什么类型的指针变量都是4个字节。指针变量的大小和类型是无关的只要是指针类型的变量在相同的平台下大小都是相同的。3.指针变量类型的意义3.1指针的解引用int main() { int a 0x11223344; int* p a; *p 0; return 0; }结论指针的类型决定了对指针解引用的时候有多大的权限一次能操作几个字节。比如char*的指针解引用就只能访问一个字节而int*的指针的解引用就能访问四个字节。3.2指针-整数int main() { int a 0x11223344; int* pa a; char* pc a;//int * printf(pa %p\n, pa); printf(pa1 %p\n, pa1); printf(pc %p\n, pc); printf(pc1 %p\n, pc1); return 0; //输出如下 pa 0000000DA5750FAF4 pa1 0000000DA5750FAF8 //跳过了4个字节 pc 0000000DA5750FAF4 pc1 0000000DA5750FAF5 //跳过了1个字节 }3.3void*指针一般void*类型的指针是使用在函数参数的部分用来接收不同类型数据的地址这样的设计可以实现泛型编程的效果使得一个函数来处理多种类型的数据。4.指针运算指针的基本运算有三种分别是指针-整数指针-指针指针的关系运算4.1指针-整数因为数组在内存中是连续存放的只要知道第一个元素的地址顺藤摸瓜就能找到后面的所有元素。4.2指针-指针指针 整数 指针指针 - 整数 指针指针 - 指针 整数指针 - 指针得到的是指针和指针之间的元素个数前提两个指针指向的是同一块空间数组名是地址是数组首元素的地址4.3指针的关系运算指针就是指针地址就是编号编号就是一个数值。随着下标的增长地址是由小到大变化的
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →