ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C语言——指针的介绍和运用,指针和数组的关系

C语言——指针的介绍和运用,指针和数组的关系 指针是C语言中的一个重要概念也是C语言的一个重要特色。正确而灵活地运用它可以有效地表示复杂的数据结构能动态分配内存方便地使用字符串有效而方便地使用数组在调用函数时能获得1个以上的结果能直接处理内存单元地址等这对设计系统软件是非常必要的。掌握指针的应用可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人都应当深入地学习和掌握指针。可以说不掌握指针就是没有掌握C的精华。1指针本身很抽象2指针可以和前面学过的所有内容关联起来指针普通变量 指针数组 指针函数 指针指针什么是指针计算机的内存是按字节进行编址的——一个字节一个地址编号地址——通过地址信息可以找到想要的目标地址值本身也是一种数值关键在于能否像普通变量一样给地址值开一个空间所以引出了——指针的概念指针(pointer)——指针就是地址地址就是内存单元的编号想要存储或者处理指针的编号有一种数据类型叫指针类型指针类型——这是一种数据类型——可以用来处理指针这种数据以及相关运算指针数据和普通整型数据区别是一个是地址编号一个是实际大小地址编号即内存单元编号1000 数值大小1000语法定义一个指针类型变量一般形式为基类型 * 指针变量名1.基类型 表示的是指针地址所指向的空间的数据类型2.* 定义指针变量时只是用来说明是指针类型的3.指针变量名就是一个标识符和普通变量名命名规则一致egint a 10int * p//定义了一个指针变量p//定义了一个类型指向int型数据的指针变量//也意味着开了一个空间空间开多大取决于p对应的数据类型32位 系统 --- 对应地址大小 统一都是32位 --4个字节64位 系统 --- 对应地址大小 统一都是64位 --8个字节int * p a; //a是取地址运算这句话的意思是p放了a的地址也就是p指向a如何对a这块空间使用1.直接通过a使用即a 某个值2.简介引用——指针的方式int a 10int *p a1首先通过p本身可以得到a所在空间的地址2*运算数——指针运算符(解引用)——运算数必须是地址 *p运算过程//1拿出p中的地址编号到内存中寻找//2从定位处开始偏移出sizeof(基类型)大小的一块空间//3将偏移出这块空间当做一个基类型变量来看*p运算结果整体上相当于一个int类型变量即当成a使用指针的作用之一可以实现被调函数修改主调函数1要修改谁就传谁的地址2在被调函数中一定要有相应的*p运算例如int addOne(int *p) { *p *p 1 //这里的*p就相当于主函数的n } main() { int n 10; //主调函数中 有一个变量 想在被调函数中对这个变量进行修改 addOne(n); }注意理解int *a这里的 * 是声明标记不是解引用运算意思定义变量 a a 的类型是 int * 整型指针变量 a 里面存放的是一个int变量的内存地址。*a这里的 * 是解引用运算符单目运算作用拿到 a 里面存的地址访问这个地址对应的内存里面的值。指针与数组//通过指针 操作 数组数组名从值的的角度 --数组名代表数组首元素的地址 ---首元素地址也是整个数组起始地址int *p a; a[0]; // a[0]是int类型//a[0] 即取了一个存放int型数据空间的地址 //指针指向数组的运算p 1 //表示地址加了一个基类型大小p N //表示地址加了N个基类型大小p - 1 //表示地址减了一个基类型大小p - N //表示地址减了N个基类型大小两个指针相乘相加没有意义相减可以有点用比如得到两个数组间相差了多少个数(前提是同类型指针)举例int a[10];*p a[0];*q a[5];这时候p-q -5地址编号相差4*520但是相减结果是-5表示差了五个基类型关系运算 !p q //地址编号 编号大的 就大指针操作数组因为数组的特点只需要知道首元素地址即可指针运算pN指针 * 运算即可访问数组pi即第i个元素的地址*(pi)即第i个元素的值a[i]*(pi)a[i]*(ai) 因为a是首元素
返回列表