C语言指针知识点小结
前期回顾
C语言指针基础知识点(一)–指针及指针变量
C语言指针基础知识点(二)–指针变量的引用
C语言指针基础知识点(三)–指针变量作为函数参数
C语言指针基础知识点(四)–通过指针引用数组
C语言指针基础知识点(五)–用数组名作函数参数
C语言指针基础知识点(六)–通过指针引用多维数组
C语言指针基础知识点(七)–通过指针引用字符串
C语言指针基础知识点(八)–返回指针值的函数
C语言指针基础知识点(九)–指针数组和多重指针
C语言指针基础知识点(十)–动态内存分配与指向它的指针变量
指针小结
1. 指针的含义
指针就是地址,凡是出现"指针"的地方,都可以用"地址"代替,例如,变量的指针就是变量的地址,指针变量就是地址变量。
要区分指针和指针变量。指针就是地址本身,例如2008是某一变量的地址,2008就是变量的指针。而指针变量是用来存放地址的变量。指针变量的值是一个地址。
2. 什么叫"指向"
地址就意味着指向,因为通过地址能找到具有该地址的对象。对于指针变量来说,把谁的地址存放在指针变量中,就说此指针变量指向谁。但应注意:并不是任何类型数据的地址都可以存放在同一个指针变量中的,只有与指针变量的基类型相同的数据的地址才能存放在相应的指针变量中。例如:
int a, *p; // p是 int * 型的指针变量,基类型是 int 型
float b;
p=&a; // a 是 int 型,合法
p=&b; // b 是 float 型,类型不匹配
既然许多数据对象(如变量、数组、字符串、函数等)都在内存中被分配存储空间,就有了地址,也就有了指针。可以定义一些指针变量,存放这些数据对象的地址,即指向这些对象。
void * 指针是一种特殊的指针,不指向任何类型的数据,如果需要用此地址指向某类型的数据,应先对地址进行类型转换。显示或隐示的类型转换。
3. 在对数组的操作中正确地使用指针
一维数组名代表数组首元素的地址,如:
int *p, a[10];
p=a;
p是指向 int 型类型的指针变量,显然,p 只能指向 a 数组中的元素,而不是指向整个数组。在进行赋值时一定要先确定赋值号两侧的类型是否相同,是否允许赋值。
对p = a;
, 准确地说应该是:p 指向 a 数组的首元素,在不引起误解的情况下,有时也简称为:p指向a 数组。 同理,p 指向字符串,应理解为 p 指向字符串中的首字符
4. 指针变量的归纳比较
变量定义 | 类型表示 | 含义 |
---|---|---|
int *p[4] | int *[4] | 定义指针数组p,它由4个指向整型数据的指针元素组成 |
int (*p)[4] | int (*)[4] | p为指向包含4个元素的一维数组的指针变量 |
int *p() | int *() | p为返回一个指针的函数,该指针指向整型数据 |
int (*p)() | int (*)() | p为指向函数的指针,该函数返回一个整型值 |
int **p | int ** | p是一个指针变量,它指向一个指向整型数据的指针变量 |
void *p | void * | p是一个指针变量,其基类型为 void,不指向具体的对象 |
5. 指针运算
a. 指针变量加减一个整数
例如: p++, p- -, p+i, p-i, p+=i, p-=i 等均是指针变量加(减)一个整数。
将该指针变量的原值和它指向的变量所占用的存储单元的字节数相加(减)
b. 指针变量赋值
将一个变量地址赋给一个指针变量。如:
p=&a; // 将变量a的地址赋值给p
p=array; // 将数组array首元素的地址赋给p
p=&array[i]; // 将数组 array 第 i 个元素的地址赋给p
p=max(); // max为已定义的函数,将max的入口地址赋给p
pa=p2; // p1和p2是基类型相同的指针变量,将p2的值赋给p1
c. 两个指针变量可以相减
如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数。
d. 两个指针变量比较
若两个指针变量指向同一个数组中的元素,则可以进行比较。指向前面的元素的指针变量"小于"指向后面元素的指针变量。如果 p1 和 p2 不指向同一数组则比较无意义。
6. 指针变量可以有空值
指针变量可以不指向任何变量,可以这样表示:
p=NULL;
其中,NULL是一个符号常量,代表整数0。在stdio.h头文件中对NULL进行了定义:
# define NULL 0
它使p指向地址为0的单元。系统保证使该单元不作他用。
注意:
- 不应把一个整数赋给指针变量
- p的值为 NULL 与未对 p 赋值是两个不同的概念。
- 任何指针变量或地址都可以与NULL作相等或不相等的比较,例如:
if (p==NULL)
C语言指针知识点小结相关推荐
- c语言获取指针分配的字节数,c语言指针知识点总结(共6篇).docx
c语言指针知识点总结(共6篇) C语言指针教学中的知识点分析与总结 摘要:分析指针的基本概念及指针在数组.函数.字符串.动态存储分配等方面的应用,提出指针教学过程中易混淆概念及注意事项,对初学者深入理 ...
- c语言指针知识点总结
场景一: //问题:对数组取地址,是否能应用于二级指针传递 void test(int** p) {}void main() {int arr[]={10,20,30,40};test(&ar ...
- 在c语言中下面指针,c语言指针的知识点
在计算机科学中,指针 ***Pointer***是编程语言中的一个对象,利用地址,它的值直接指向***points to***存在电脑存储器中另一个地方的值.下面是小编为大家整理的C语言的指针知识点总 ...
- python语言基础知识点总结_Python语言的12个基础知识点小结
Python语言的12个基础知识点小结 python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(g ...
- C语言指针小结(一)---- *p++与*++p;(*p)++ 与 ++(*p)的解释
C语言指针小结(一) *p++与*++p:(*p)++ 与 ++(*p)的理解 1.*p++ 等同于 *p; p += 1; #include <stdio.h> int main(voi ...
- C语言指针基础知识点(六)--通过指针引用多维数组
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- C语言指针基础知识点(四)--通过指针引用数组
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- C语言指针基础知识点(七)--通过指针引用字符串
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
最新文章
- 小冰拉开人生第二幕:AI时代的“Office”问世,你的虚拟男友“复活”了
- 模块-基本概念和import导入复习
- java对mysql的简单操作的综合运用——登录系统
- 05-windows下R安装包的几种方式
- 医药电商为何发展不起来?
- Mysql主从占用大量cpu_Mysql占用过高CPU时的优化手段
- sql 查询 当不想查出记录时候采用的方法
- 0ctf-2016 pwn-warmup writeup
- 征途完美单机版_征途世界单机版
- 【移动端网页布局】移动端网页布局基础概念 ① ( 移动端浏览器 | 移动端屏幕分辨率 | 移动端网页调试方法 )
- Docker使用docker-compose配合Makefile部署Nginx 挂载文件目录 实现视频图片html等静态资源的代理
- C# Microsoft.Office.Interop.Excel Could not load file Error
- Promise、Promise.all 和Promise.race用法
- RINEX3 版本 Observation codes 介绍
- 解决Ubuntu无线网卡突然无法连接
- RBC(Radio Block Center)无线闭塞中心
- 医院项目-预约挂号-第五部分
- 碳排放zc汇总、碳排放权交易、省级碳排放效率、环保数据集(2007-2022年)
- 丰炜vb0和两台变频器的modbus rtu通信程序
- 【Ansys】错误:The files shown in details are missing from the project.
热门文章
- 打印机无法打印,配置端口显示错误?
- 疯狂足球——Android手机游戏开发(实习报告)
- HDLC广域网协议设置
- 110配线架打法图解_110配线架详解[来自互联网]
- java计算机毕业设计干洗店订单管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
- 无线路由器的基础配置(三)
- 浅谈计算机网络的未来发展趋势
- 台式计算机用u盘给电脑安装系统,如何在台式计算机上用U盘重新安装Win7系统
- 是你吗?为超炫的 USB 硬件编写更好的软件
- 【解决方案】SkeyeVSS煤矿安全生产监管视频监控系统,夯实煤矿生产安全防线