C语言的指针

2022/2/11 23:42:40

本文主要是介绍C语言的指针,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

指针是什么?
指针就是地址。由于通过地址可以找到所需的单元变量,所以说,地址指向该变量单元所以将地址形象成为“指针”。
指针变量?
指针是一个地址,指针变量是存放地址的变量,换句话说就是存放地址的变量是指针变量。
定义:类型名 *指针变量名
如: int *pointer; pointer是变量名,指针变量的基类型是int,就是说指向的内存空间存放的数据类型是整型。
注意
1、指针变量是基于基本数据类型派生出来的类型,不可以离开基本数据类型而存在。
2、指针变量前面的“ * ”是表示该变量为指针型变量。
3、不同类型的数据在内存中所占的字节数和存放方式是不同的,所以要区分 不同的数据类型
4、一个变量的指针的含义包括两方面,一是以存储单元编号表示的纯地址,一个是它指向的存储单元的数据类型(int float char 等)。
5、指针变量中只能存放地址(指针),不能存放其他的。地址只能用地址符“ & ”得到并赋给一个指针变量。int *p; p = &a
6、" & " 取地址运算符 &a是变量a的地址。
" * " 指针运算符(间接访问运算符),*p代表指针变量p指向的对象
在这里插入图片描述
指针变量作为函数参数
作用:将变量的地址传送到另一个函数中
在这里插入图片描述
交换函数不可以写成下图这样,因为实参传过来的是地址,形参就需要用指针变量来接。
在这里插入图片描述
注意:函数的调用只可以得到一个返回值,但是使用指针变量作为参数,就可以得到多个变化了的值。

通过指针引用数组
数组元素的指针:一个变量有地址,一个数组包含若干个元素,每个元素都在内存中占用存储单元,它们都有相应的地址。所以数组元素的指针就是数组元素的地址
在这里插入图片描述
在引用数组元素时指针的运算
1、如果指针变量p已经指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一个数组中的上一个元素。但是需要注意执行p+1时并不是将p的值简单的+1,而是加上一个数组元素所占用的字节数。
2、如果p的初值是&a[0],则 p+i 和 a+i 就是数组元素a[i]的地址,
在这里插入图片描述
上图是a+1并不是单纯的+1,而是1 x d;
3、*(p+i) 或者 *(a+i) 是 p+i 和 a+i 所指向的数据组元素,即a[i].
4、如果指针变量p1和p2 都指向同一数组中的元素,如果执行 p2 - p1,结果是两个地址之差除以素组元素的长度,可以得到所指元素之间的相对位置。但是不可以相加

通过指针引用数组
引用数组元素有两种方法:下标法指针法
下标法: a[i];
指针法: *(a+i) 或者 *(p+i),其中a是数组名,p是指向数组元素的指针变量,初值是 p = a;
在这里插入图片描述
用数组名作函数参数
fun(int arr[] , int n) 与 fun(int *arr , int n) 等价
注意:实参数组名代表一个固定的地址,或者说是指针常量,但形参数组名并不是一个固定的地址,而是作为指针变量来处理的。如果指针变量作为实参必须先使指针变量有确定的值,指向一个已经定义的对象,不然不可以作为实参

通过指针引用多维数组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
指向多维数组元素的指针变量
1、指向数组元素的指针变量
int a[3][4]; int *p;
p = a[0];
2、指向由m个元素组成的一维数组的指针变量
int (*p)[4];
p = a;

用指向数组的指针作函数参数
数组指针的应用场景(函数传参)
1、传一维数组名,用元素指针来接
2、传二维数组名,用一维数组指针来接
3、传三位数组名,用二维数组指针来接

通过指针引用字符串
字符串的引用方式
1、用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符。
2、也可以通过数组名和格式申明“ %s ” 输出字符串。
在这里插入图片描述
在这里插入图片描述
字符指针作为函数参数
将一个字符串从一个函数传给另一个函数,可以用地址传递的办法,即用字符数组名作为参数,或者用字符指针变量作参数。在被调用的函数中可以改变字符串的内容,在主调函数中可以引用改变后的字符串。

字符指针变量和字符数组的比较
1、字符数组由若干元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址。
2、赋值方式:可以对字符指针变量赋值,但是不可以对数组名赋值
3、指针变量的值可以改变,而字符数组名代表一个固定的值。不能改变。

指向函数的指针
定义 :类型名 (*指针变量名)(函数参数列表)
1、定义指向函数的指针,并不是可以指向任何函数,需要符合它的基本数据类型
2、用指针调用函数时,必须先使指针变量指向该函数。
3、在给指针函数赋值时,只需要给出函数名不需要给出参数。
4、在用函数指针变量调用函数时,只需要将(*p)代替函数名即可,在(*p)后面加上实参 c = (*p)(a,b);

用指向函数的指针作函数参数
指向函数的指针变量的一个重要用途是把函数的入口地址作为参数传递到其他函数。

返回指针值的函数
定义:类型名 * 函数名(参数列表)

指针数组和多重指针
指针数组定义:一个数组,其元素均为指针类型数据,称为指针数组。
定义:类型名 *指针变量名[ ]
注意和数组指针进行区分。
指针数组适合用来指向若干个字符串,是字符串访问更加灵活。
在这里插入图片描述
在这里插入图片描述
指针数组作为main函数的形参
int main(int argc , char *argv[])
argc 和 argc[]是程序的" 命令行参数 "
int型用来接收形参个数,字符型用来接收从操作系统命令行传来的字符串中的首字符。

动态内存分配和指向它的指针变量
如何建立内存的动态分配
通过系统提供的库函数来实现,主要有 malloc,calloc,free,realloc这4个函数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



这篇关于C语言的指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程