C进阶-指针

本文详细介绍了指针的基础概念,包括指针变量、函数指针、数组指针和结构体指针。指针是C语言中重要的概念,它涉及地址、内存管理和函数调用。文章还讨论了野指针和空指针的问题,并给出了指针变量的赋值、引用以及作为函数参数的使用方法。
摘要由CSDN通过智能技术生成

目录

指针的基础概念

一、指针变量

二、函数指针

三、数组指针

四、结构体指针


指针的基础概念

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

下面链接有详细介绍

指针变量作为函数参数_aiok_ywh的博客-CSDN博客

二、函数指针

函数指针,即指向函数地址的指针,内存空间存放函数的地址(与数组名类似,函数名等于函数地址)。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

定义:

返回值类型 (* 指针变量名)(形参列表)

例:int (*p)(int,int);        //指针p指向函数func,两个形参,对应a,b

p=& func ; or p =fun;     //指针指向函数的入口地址,函数名就是函数的首地址

void func(int a,int b)//函数func

{

..............

}

三、数组指针

数组指针即指向数组地址的指针,存放的是数组的地址(数组名等于数组首地址)

分为一维数组和二维数组

四、结构体指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值