查看: 113|回复: 2

C语言指针笔记

[复制链接]

2

主题

7

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2022-11-27 19:40:42 | 显示全部楼层 |阅读模式
最近在看数据结构顺便总结了下指针,上学的时候老师总说C语言的灵魂就是指针,理解了指针才是真正掌握了C语言,现在看来确实是这样的。
为什么会有指针

指针为什么会诞生呢,我们一直用的数组不好吗?
我们是一开始就接触数组的,所以有一种先入为主的感觉,可是数组也有自己的缺点,数组在查询的时候是很快的,时间复杂度是常数级别O(1)的。但是要插入和删除呢?时间复杂度还会是常数级别吗?
举例:int a[5] = {1,2,3,4,5}
如果我要在2和3之间插入一个数字,要怎么做呢?是不是应该3,4,5向后移一位,然后在插入进去。这样时间复杂度是多少呢?答案是O(n)。是不是比查询的时候慢多了呢?是的,就是慢了很多,所以需要改善它, 指针就这样诞生了。
指针的定义


  • 指针就是地址,地址就是指针
  • 指针的本质是一个操作受限的非负整数
地址的定义:地址就是内存单元的编号,从0开始的非负整数
范围:0---FFFFFFFF[0-4G-1] (地址线是32位,刚好控制2的32次)
指针变量

指针变量是存放内存单元地址的变量-----简单来说就是存放地址的变量
来看下图定义一个指针变量:




接下来我们来看看代码
int c = 76;
//定义名字为pointer的指针变量
int * pointer;
//将变量的C的地址赋值给指针变量 pointer
//赋值后,称指针变量 pointer指向了变量c
pointer = &c;
我们有时会问 能不能写成 pointer = c;绝对不行!因为pointer是存放地址的变量,所以只能存在地址
指针变量如何访问变量的值?

既然指针变量中存放的是“某个变量的地址”可否通过“指针变量”访问 “它所指向的变量” ?
答案是:可以的,可以利用 指针运算符 * 实现。我们来看段代码
//比如:
int c = 76;
int * pointer = &c;
printf("%d\n", *pointer); //打印出76
//则 *pointer 为 pointer所指向的存储单元的内容
//pointer 所指向的存储单元的内容 是 “变量C” 为76所以总结

指针变量也是变量,只不过它存放的不能是内存单元的内容,只能存放内存单元的地址。
普通变量前不能加*
常量和表达式前不能加&
答疑

有的小伙伴可能还看到过一种定义 int **pointer 这种就是指向指针的指针了,哈哈听上去拗口,看看伪代码
int main()
{
    int * p;
    func(&p);//传递的是指针变量的地址
}
void func(int **q) {}看明白了吗,指针变量也是有自己的地址的,所以传递的时候是传递了指针变量的地址过去,就变成了指向指针的指针。
为了帮助大家,轻松,高效学习C语言/C++,给大家分享我收集的资源,从最零基础开始的,帮助大家在学习C语言的道路上披荆斩棘!点击上方即可获取,还可以一起来学习交流嗷
回复

使用道具 举报

2

主题

8

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2025-3-16 04:09:54 | 显示全部楼层
LZ帖子不给力,勉强给回复下吧
回复

使用道具 举报

2

主题

14

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 13 小时前 | 显示全部楼层
专业抢沙发的!哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表