目录
指针的基础概念
0.1定义:
指针即地址,但是我们一般说的指针其实是指针变量。如 int* p; p是指针变量。int* p与int *p用法差不多。
0.2指针与下标的关系
指针,是一个数据类型。指针变量用于存储内存的绝对地址。相当于起始地址从0开始。指针变量中可以更改值,也就是更改了指向的内存地址。指针就是这个作用。而指针经常与下标配合使用,形同数组。这才让很多人把数组与指针混淆了。而指针变量加上下标,代表的意义就是:指针中的值就是起始地址,下标则是从指针中存储的地址作为起始地址开始偏移的。只不过,指针变量的值可以改变,因此表示起始地址是可以改变的。而普通的数组,一旦定义了,地址就固定了。这个就像在地上走一段路,就是数组中的下标。而在向前跑的车上向前走,就是指针加上下标的结果。
0.2野指针
当指针指向的栈内存空间释放后,指针仍指向该内存,而内存中的值变为随机码(乱码),释放内存的结合只改变内存存储的数据,使内存存储的数据变为垃圾,指向垃圾内存的指针称为野指针。
0.3空指针
如果一个指针不指向任何数据,我们就称之为空指针。
一、指针变量
指针变量与变量指针的区别
指针变量:存放指针的变量,也可以理解为存放地址的变量。如:b=&a;变量b的类型需要和a的类型一致。
变量指针:变量指针就是指针,是变量的地址,如&a。
指针和地址常见用法
&p:表示取变量p的地址,也就是指针,其类型取决于a的类型;
(int*)p:表示将变量p转换成指针形式,也就是地址;
(int)&p:表示取整型数据p的地址;
(int*)&a:等价于int *p = &a,意思是取a的地址,将a的地址准换成成int类型的指针变量,指向的a地址的最低位开始的数据。
1.1怎样引用指针变量
1.给指针变量赋值
int a,*p;
p=&a;
2.引用指针变量所指向的变量
*p=1;//*p=*(&a)=a,*p=1等于给变量a赋值1
3.引用指针变量的值
printf("%o",p); //假如p指向a的地址,以八进制的形式输出a的地址
1.2指针变量作为函数参数
函数的参数是指针类型,它的作用是将一个变量的地址传到另一个函数去。在C语言中,实参变量和形参变量之间的数据传递是单向的“值传递”方式,指针变量作为函数参数时同样遵循这一规则。不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指向的变量的值。 函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作为函数参数,可以得到多个变化了的值。
————————————————
版权声明:本文为CSDN博主「aiok_ywh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ywh_code/article/details/103931084
下面链接有详细介绍
二、函数指针
函数指针,即指向函数地址的指针,内存空间存放函数的地址(与数组名类似,函数名等于函数地址)。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
定义:
返回值类型 (* 指针变量名)(形参列表)
例:int (*p)(int,int); //指针p指向函数func,两个形参,对应a,b
p=& func ; or p =fun; //指针指向函数的入口地址,函数名就是函数的首地址
void func(int a,int b)//函数func
{
..............
}
三、数组指针
数组指针即指向数组地址的指针,存放的是数组的地址(数组名等于数组首地址)
分为一维数组和二维数组