【C语言】指针

目录

一、指针的基本概念

1.1 指针的基本特性

1.2 指针的使用

1.3 注意事项

二、基于指针的程序设计

2.1 指针类型、变量和基本操作型

2.1.1 指针类型

2.1.2 指针型变量的定义

2.1.3 指针的初始化

​编辑2.1.4 指针的运算

2.1.5 指针的比较

2.2 指针与函数

2.2.1 指针参数

2.2.2 数组型形参

2.2.2 指针型返回值

2.3 指针与数组

2.3.1 指针与一维数组

2.3.2 指针与二维数组

2.4 指针与结构体

2.4 指针数组与动态存储空间


        指针是计算机编程语言中一个极其重要且充满魅力的概念,尤其是在C、C++、C#等底层或系统级编程语言中。它不仅代表了程序对内存控制的直接体现,还体现了程序员对计算机内部工作机制的深入理解。指针本质上是一个特殊的变量,它的值是一个内存地址,通过这个地址,我们可以直接访问或修改存储在内存中的原始数据。

一、指针的基本概念

1.1 指针的基本特性

        存储地址:指针变量与普通变量不同,它存储的不是实际的数据值,而是另一个变量在内存中的地址。这个地址是唯一的,能够精确地指向数据在内存中的位置。

        间接访问:由于指针存储的是地址,我们可以通过这个地址间接地访问或修改存储在内存中的数据。这种间接访问的方式为程序提供了极大的灵活性,使得程序员能够直接操作内存中的数据。

        内存操作:指针提供了对内存的直接访问,这使得程序员能够执行一些底层操作,如动态内存分配、数组和链表管理等。通过指针,我们可以更加精细地控制内存的使用,提高程序的效率和稳定性。

1.2 指针的使用

        指针的声明:在C语言中,我们使用星号(*)来声明一个指针变量。例如,`int *ptr;` 这行代码就声明了一个名为ptr的指针变量,它指向一个整型数据。这里的星号(*)表示ptr是一个指针变量。

        指针的初始化:在声明指针后,我们需要将其初始化为一个有效的内存地址。这可以通过将指针指向一个已存在的变量(如`ptr = &var;`,其中var是一个已存在的整型变量)或动态分配的内存(如`ptr = (int *)malloc(sizeof(int));`)来完成。

        通过指针访问数据:一旦指针被初始化,我们就可以使用星号(*)运算符来访问或修改指针所指向的数据。例如,`*ptr = 10;` 这行代码将把值10存储在ptr所指向的内存地址中,也就是说,我们将值10赋给了ptr所指向的那个整型变量。

        指针的运算:指针可以进行一些特殊的运算,如加法、减法和比较运算。这些运算通常用于遍历数组或链表等数据结构。例如,`ptr++` 这行代码将使ptr指向下一个整型数据;而`if(ptr1 > ptr2)` 这行代码则用于比较两个指针所指向的内存地址的大小。

1.3 注意事项

        空指针:未初始化的指针可能包含随机的内存地址,这个地址可能是无效的或者已经被其他程序占用。如果直接访问这个地址,可能会导致程序崩溃或数据损坏。因此,在使用指针之前,一定要确保它已经被正确初始化。

        野指针:如果一个指针被释放(如在C语言中使用`free()`函数),但它仍然被引用,那么它就是一个野指针。野指针可能会导致不可预测的结果,包括程序崩溃和数据损坏。为了避免野指针的出现,我们应该在释放指针后立即将其置为NULL。

        指针越界:指针访问的内存地址必须在有效的范围内。如果指针访问的内存地址超出了其应有的范围(如数组越界),那么可能会导致内存泄漏、数据损坏甚至程序崩溃等严重后果。因此,在使用指针时,我们应该时刻注意指针的指向范围,确保不会出现越界访问的情况。

二、基于指针的程序设计</

  • 35
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雨淅淅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值