【C】指针——知识点大全(详细,简洁,含例题)

这篇具有很好参考价值的文章主要介绍了【C】指针——知识点大全(详细,简洁,含例题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 前言:大家好,这里是YY;此篇博客主要是指针的知识点;包含【一二级指针】【字符指针】【指针数组】【数组指针】【以上知识的实际应用】【函数指针】【函数指针数组】

PS:创作不易,每个知识点都有例题或者图帮助理解;如果对你有帮助,希望能够得到您的关注,赞,收藏,谢谢!  

目录

一.指针的基本概念

二.理解一级指针,二级指针

2.二级指针传参

精华.二级指针的实际应用场景: 链表的增删查改(逐步探究)

三.字符指针

1.字符指针指向常量字符串

*加上const后的数据在内存中存储的情况

2.利用字符指针打印字符串

四.指针数组

1.应用:存储字符串组

2.应用:模拟二维数组

五.&数组名 / &数组名[ ] / 数组名

六.指针类型决定步长(演示)

七.数组指针

1.基本概念与形式

2.区分指针数组与数组指针

3.数组指针的使用

一.(数组传参,数组形式接收)

二.(首元素地址传参)

*三.(数组指针传参)——较繁琐,在一维数组上用的比较少

八.指针在二维数组的应用

1.常规写法(数组传参,数组形式接收)

2.指针写法(数组传参,数组指针形式接收)

九.小总结:区分下列表达式

1.基础部分

2.拓展部分 

十.数组参数,指针参数要点

1.一维数组传参要点

一.数组形式接收

 二.用指针形式接收

2.二维数组传参要点 

一.数组形式接收

二.用数组指针形式接收

十一.函数指针

十二.函数指针数组

1.作用与使用演示:

2. 应用场景:替代switch case语句


一.指针的基本概念

  1. 指针就是个变量,用来存放地址(地址唯一标识一块内存空间)
  2. 指针的大小是固定的4/8个字节(32位平台/64位平台)
  3. 指针是有类型的,指针的类型决定了“指针的+-整数的步长”,以及解引用时候的权限
  4. 指针之间存在运算

二.理解一级指针,二级指针

指针:即一个指针变量指向一份普通类型的数据,因为指针保存了那个数据的地址,可以通过解引用找到它(p1找到a)

一级指针图示:

【C】指针——知识点大全(详细,简洁,含例题)


2.二级指针传参

二级指针:即一个指针变量指向指针,因为指针保存了那个数据的地址,可以通过两次解引用找到它(p2解引用找到p1,再解引用找到a)

二级指针图示:

【C】指针——知识点大全(详细,简洁,含例题)


精华.二级指针的实际应用场景: 链表的增删查改(逐步探究)

我们可以观察如图所示的情况:

说明:

  • pphead是函数SLPushBack中接收plist地址的指针
  • 函数SLPuchBack实现的是尾插功能,tail指针变量存储尾指针newnode是malloc一个新节点以后存储新节点的指针

【C】指针——知识点大全(详细,简洁,含例题)

  • 当SLPushBack()函数结束后,会返还空间,此时结构体plist再也找不到在堆上的链表
  • 解决方法:一级指针!让plist指向头指针(如果头指针不可被修改)guard

【C】指针——知识点大全(详细,简洁,含例题)

  • 但是如果头指针不是哨兵位的头节点(guard),而是可以被删除的结点呢?
  • 解决方法:二级指针!每一次调用函数,都会把plist指向头指针

【C】指针——知识点大全(详细,简洁,含例题)


三.字符指针


1.字符指针指向常量字符串

字符指针指向常量字符串原理:指针指向字符串首元素的地址

理解图示:

【C】指针——知识点大全(详细,简洁,含例题)

PS:为满足“常量字符串不可修改”,需改进:“指针前加上const

【C】指针——知识点大全(详细,简洁,含例题)


*加上const后的数据在内存中存储的情况

编译器从内存优化的角度处理,数据只会存放到同一个地址

【C】指针——知识点大全(详细,简洁,含例题)


2.利用字符指针打印字符串

打印原理:打印字符串只需要首元素地址

const char*ps="abcdef";
printf("%s\n",ps);

四.指针数组

指针数组类型:类型 * [ n ]


1.应用:存储字符串组

【C】指针——知识点大全(详细,简洁,含例题)


2.应用:模拟二维数组

【C】指针——知识点大全(详细,简洁,含例题)


五.&数组名 / &数组名[ ] / 数组名

引入:我们知道arr是数组名即首元素地址,那&arr是什么?

结论:

  • 除了在sizeof()中,在&arr中,arr(数组名)指的不是数组首元素的地址
  • &arr的类型是数组指针(例:int(*pa)[10])
  • &arr[0]与arr的类型是指针(例:int*

六.指针类型决定步长(演示)

要点:&arr取出的是整个数组的地址,+1后则跳过整个数组

【C】指针——知识点大全(详细,简洁,含例题)


七.数组指针


1.基本概念与形式

数组指针类型:int(*)[10]

int arr[10]={1,2,3,4,5};
int (*pa)[10]=&arr;  取出的是数组的地址存放到pa中,pa是数组指针变量

2.区分指针数组与数组指针

  • int*p1[10]:指针数组
  • int(*p)[10]:数组指针

3.数组指针的使用


一.(数组传参,数组形式接收)

  • 数组传参传数组名的本质:也是传首元素地址
  • 【数组的地址=首元素的地址=数组的起始位置】

【C】指针——知识点大全(详细,简洁,含例题)


二.(首元素地址传参)

【C】指针——知识点大全(详细,简洁,含例题)

 PS:数组名是首元素地址:只有两个例外:sizeof(数组名)/&数组名


*三.(数组指针传参)——较繁琐,在一维数组上用的比较少

【C】指针——知识点大全(详细,简洁,含例题)


八.指针在二维数组的应用


1.常规写法(数组传参,数组形式接收)

代码图示:

【C】指针——知识点大全(详细,简洁,含例题)


2.指针写法(数组传参,数组指针形式接收)

原理:

  • *所以当二维数组的首元素+1时,直接跳过一行,来到下一行

  • *变化以后,可以视作(一维数组)首元素的地址”+j”后,访问数组

原理图示:

【C】指针——知识点大全(详细,简洁,含例题)

代码图示: 

【C】指针——知识点大全(详细,简洁,含例题)


九.小总结:区分下列表达式


1.基础部分

  • int*parr1[10]:指针数组类型
  • int(*parr2)[10]:数组指针类型
  • int(*parr3[10])[5]:存放数组指针数组

      PS: int (*                    ) [5] 是 数组指针 类型

                       parr3[10]   是 数组 类型


2.拓展部分 

  • (*(void(*) ( ) )0 ) ( );函数类型

【C】指针——知识点大全(详细,简洁,含例题)

  • void(*signal(intvoid(*)(int)))(int)函数声明 
  • 可改写为 
typedef void(*pf_t)(int);

pt_f signal(int,pf_t);

【C】指针——知识点大全(详细,简洁,含例题)


十.数组参数,指针参数要点


1.一维数组传参要点


一.数组形式接收

要点:数组传参本质上传的是地址,所以不用专门创建一个数组接受——不用规定大小

代码演示: 

void test1(int arr[]);
void test1(int arr[10];  均可以顺利传参
int main()
{
  int arr[10]={0};
  test1(arr);
  test1(arr);   
}

 二.用指针形式接收

代码演示:

void test1(int*arr);
int main()
{
  int arr[10]={0};
  test1(arr); 
}

2.二维数组传参要点 


一.数组形式接收

要点:二维数组的列不能省略,即“列”需要规定大小

代码演示:

正确写法
void test1(int arr[3][5]);
void test1(int arr[ ][5]);
错误写法:
void test1(int arr[ ][ ]); 
void test1(int arr[3][ ]); 

int main()
{
  int arr[3][5]={0};
  test1(arr); 
}

二.用数组指针形式接收

要点:必须要用数组指针接收

代码演示:

正确写法:
void test1(int(*arr)[5]);
错误写法:
void test1(int*arr);

int main()
{
  int arr[10]={0};
  test1(arr); 
}

十一.函数指针

函数指针类型:int(*pf)(int,int)


十二.函数指针数组

函数指针数组:int(*   pfArr[4]  )(int,int)


1.作用与使用演示:

函数指针数组作用:可以存放多个【参数相同,返回类型相同】的函数的地址

使用演示:

 【C】指针——知识点大全(详细,简洁,含例题)


2. 应用场景:替代switch case语句

【C】指针——知识点大全(详细,简洁,含例题)【C】指针——知识点大全(详细,简洁,含例题)文章来源地址https://www.toymoban.com/news/detail-451675.html

到了这里,关于【C】指针——知识点大全(详细,简洁,含例题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微机原理 || 8253接口芯片知识点+4道经典例题+手写解题过程

      【例1】 :  设825 3 端口地址为3 00H~303H, 要求计数器2工作在方式5,二进制计数, CLK2=2MHz , OUT2=1KHz。 试按上述要求完成825 3 的 初始化 。   【例2】: 选择计数器 0 工作于方式 3 ,计数初值为 1234 ,十进制计数方式;计数器 2 工作于方式 2 ,计数初值为 61H ,采用二进制

    2024年02月10日
    浏览(46)
  • 【计算机网络】第五章传输层知识点及经典例题汇总

    1、从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层 2、此层包含TCP和UDP协议。TCP 传送的数据单位协议是 TCP 报文段(segment),UDP 传送的数据单位协议是 UDP 报文或用户数据报。 3、IP数据报要经过

    2024年02月04日
    浏览(43)
  • selenium知识点大全

    在使用selenium之前必须先配置浏览器对应版本的webdriver。 1. 初始化浏览器对象 2. 访问指定网页 3. 设置浏览器大小 4. 刷新页面 5. 前进和后退 6. 获取页面基本属性

    2024年02月04日
    浏览(31)
  • C++知识点 -- 智能指针

    对于上面的场景,p1和p2在new申请空间后,div函数如果出现了除0错误,那么程序就会抛出异常,跳到接受异常的程序段继续执行,p1和p2申请的空间就没有被正常释放,造成了内存泄漏; 这种场景我们就可以使用智能指针来解决空间的释放问题。 RAII(Resource Acquisition Is Initia

    2024年02月03日
    浏览(56)
  • MySQL锁知识点扫盲大全

      1. 为什么需要加锁   在日常生活中,如果你心情不好想静静,不想被比别人打扰,你就可以把自己关进房间里,并且反锁。这就是生活中的加锁。   同理,对于MySQL数据库来说的话,一般的对象都是一个事务一个事务来说的。所以,如果一个事务内,一个SQL正在更新某条记

    2024年02月08日
    浏览(29)
  • 【C语言】指针知识点笔记(2)

    目录 一、野指针 二、assert断言 三、指针的使用和传址调用 四、数组名的理解 五、使用指针访问数组

    2024年01月18日
    浏览(39)
  • 【初阶】C语言指针详解——指针必备的7大知识点

    本篇文章我们来了解C语言中指针的相关内容,对于指针可以说是C语言学习中较难理解的内容。本篇以了解指针为目的,以初识为导向,从表层入手,浅析C指针! 理解指针的 两个要点: 指针是内存中一个最小单元的编号,也就是地址 平时口语中说的指针,通常指的是指针变

    2024年02月02日
    浏览(44)
  • 前端Vue3框架知识点大全

    Vue.js是一种流行的JavaScript前端框架,它的第三个版本Vue3带来了许多令人兴奋的新特性和改进。 1、响应式数据 : Vue 3采用了基于Proxy的响应式系统,相比Vue 2中的Object.defineProperty,Proxy提供了更强大和灵活的拦截器,可以捕获对象的各种操作。这使得Vue 3的响应式系统更加高效

    2024年02月11日
    浏览(41)
  • Java核心知识点整理大全23-笔记

    目录 21. JAVA 算法 21.1.1. 二分查找 21.1.2.冒泡排序算法 21.1.3. 插入排序算法 21.1.4. 快速排序算法 21.1.1. 希尔排序算法 21.1.2. 归并排序算法 21.1.3. 桶排序算法 21.1.4. 基数排序算法 21.1.5. 剪枝算法 21.1.6. 回溯算法 21.1.7. 最短路径算法 21.1.8. 最大子数组算法 21.1.9. 最长公共子序算法

    2024年02月04日
    浏览(40)
  • 关于“Python”的核心知识点整理大全56

      目录 6. 链接到页面new_topic topics.html 19.1.2 添加新条目 1. 用于添加新条目的表单 forms.py 2. URL模式new_entry urls.py 3. 视图函数new_entry() views.py 4. 模板new_entry new_entry.html 5. 链接到页面new_entry topic.html 19.1.3 编辑条目 1. URL模式edit_entry urls.py 2. 视图函数edit_entry() views.py 往期快速传送门

    2024年01月24日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包