概述
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
文末附八大详细总结
学习日记
目录
学习日记
前言编辑
一、指针的含义
二、 一个地址型的数据实际上包含3个信息
三、有关指针变量的归纳比较
四、指针运算
指针变量加(减)一个整数
指针变量赋值
两个指针变量可以相减
两个指针变量比较
空值
五、指针的优点
C语言指针操作
前言
指针这里分为八个小部分,分别是“指针变量”、“通过指针引用数组”、“*通过指针引用多维数组”、“通过指针引用字符串”、“*指向函数的指针”、“*返回指针值的函数”、“*指针数组和多重指针”、“*动态内存分配与指向它的指针变量” 。
一、指针的含义
“指针”是C语言中一个形象化的名词,形象地表示“指向”的关系,其在物理上的实现是通过地址来完成的。
&a是变量a的地址,也可称为变量a的指针。
指针变量是存放地址的变量,也可以说,指针变量是存放指针的变量。
指针变量的值是一个地址,也可以说,指针变量的值是一个指针。
指针变量也可称为地址变量,它的值是地址。
&是取地址运算符,&a是a的地址,也可以说,&是取指针运算符。
&a是变量a的指针(即指向变量a的指针)。
数组名是一个地址,是数组首元素的地址,也可以说,数组名是一个指针,是数组首元素的指针。
函数名是一个指针(指向函数代码区的首字节),也可以说函数名是一个地址(函数代码区首字节的地址)。
函数的实参如果是数组名,传递给形参的是一个地址,也可以说,传递给形参的是一个指针。
二、 一个地址型的数据实际上包含3个信息
① 表示内存编号的纯地址。
② 它本身的类型,即指针类型。
③ 以它为标识的存储单元中存放的是什么类型的数据,即基类型。
int a;
/* &a为a的地址,它就包括以上3个信息,它代表的是一个整型数据的地址,int是&a的基类型(即它指向的是int型的存储单元)。&a就是“指向整型数据的指针类型”或“基类型为整型的指针类型”,其类型可以表示为“int *”型。*/
要区别指针和指针变量。指针就是地址,而指针变量是用来存放地址的变量。
对于指针变量来说,把谁的地址存放在指针变量中,就说此指针变量指向谁。
int a,*p; //p是int*型的指针变量,基类型是int型
float b;
p=&a; //a是int型,合法
p=&b; //b是float型,类型不匹配
void *指针是一种特殊的指针,不指向任何类型的数据。如果需要用此地址指向某类型的数据,应先对地址进行类型转换。
三、有关指针变量的归纳比较
变量定义 | 类型表示 | 含义 |
int i; | int | 定义整型变量i |
int *p; | int * | 定义p为指向整型数据的指针变量 |
int a[5]; | int [5] | 定义整型数组a,它有5个元素 |
int *p[4]; | int *[4] | 定义指针数组p,它由4个指向整型数据的指针元素组成 |
int (*p)[4]; | int (*)[4] | p为指向包含4个元素的一维数组的指针变量 |
int f(); | int () | f为返回整型函数值的函数 |
int *p(); | int *() | p为返回一个指针的函数,该指针指向整型数据 |
int (*p)(); | int (*)() | p为指向函数的指针,该函数返回一个整型值 |
int **p; | int ** | p是一个指针变量,它指向一个指向整型数据的指针变量 |
void *p; | void * | p是一个指针变量,基类型为void(空类型),不指向具体的对象 |
四、指针运算
指针变量加(减)一个整数
p++; //将该指针变量的原值(是一个地址)和它指向的变量所占用的存储单元的字节数相加
指针变量赋值
将一个变量地址赋给一个指针变量。 不应把一个整数赋给指针变量。
p=&a; //将变量a的地址赋给p
p=array; //将数组array首元素地址赋给p
p=&array[i]; //将数组array第i个元素的地址赋给p
p=max; //max为已定义的函数,将max的入口地址赋给p
p1=p2; //p1和p2是基类型相同指针变量,将p2的值赋给p1
两个指针变量可以相减
如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数。
两个指针变量比较
若两个指针指向同一个数组的元素,则可以进行比较。指向前面的元素的指针变量“小于”指向后面元素的指针变量。如果p1和p2不指向同一数组则比较无意义。
空值
指针变量可以有空值,即该指针变量不指向任何变量。 NULL是一个符号常量,代表整数0。在stdio.h头文件中对NULL进行了定义:#define NULL 0 它使p指向地址为0的单元。系统保证使该单元不作它用(不存放有效数据)。
p的值为NULL与未对p赋值是两个不同的概念。前者是有值的(值为0),不指向任何变量,后者虽未对p赋值但并不等于p无值,只是它的值是一个无法预料的值,也就是p可能指向一个事先未指定的单元。
五、指针的优点
提高程序效率;
在调用函数时当指针指向的变量的值改变时,这些值能够为主调函数使用,即可以从函数调用得到多个可改变的值;
可以实现动态存储分配。
如果使用指针不当,会出现隐蔽的、难以发现和排除的故障。因此,使用指针要十分小心谨慎。
C语言指针操作
C语言指针操作(一)指针变量
C语言指针操作(二)通过指针引用数组
C语言指针操作(三)*通过指针引用多维数组
C语言指针操作(四)通过指针引用字符串
C语言指针操作(五)*指向函数的指针
C语言指针操作(六)*返回指针值的函数
C语言指针操作(七)*指针数组和多重指针
C语言指针操作(八)*动态内存分配与指向它的指针变量
最后
以上就是壮观鞋垫为你收集整理的C语言指针操作·八大总结学习日记前言一、指针的含义 二、 一个地址型的数据实际上包含3个信息 三、有关指针变量的归纳比较四、指针运算 五、指针的优点C语言指针操作的全部内容,希望文章能够帮你解决C语言指针操作·八大总结学习日记前言一、指针的含义 二、 一个地址型的数据实际上包含3个信息 三、有关指针变量的归纳比较四、指针运算 五、指针的优点C语言指针操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复