Lazy loaded image
embedded
c语言-指针专题
Words 1038Read Time 3 min
2025-7-15
2025-8-7
type
status
date
slug
summary
tags
category
icon
password

1、指针入门

两值:自身的值,指向的值。
四方面:
1、指针的本质:地址
2、指针自身类型:
3、指针指向的类型:
4、指针的大小:所占内存空间数,4字节或8字节
notion image

2、const and point

const int *p;//*p为常量 p为变量
int const *p;//*p为常量 p为变量
int* const p;//p为常量 *p为变量
const int* const p;//*p和p都为常量

3、隔山打牛

实现了一个简单的加法功能,并将结果通过指针传递回来。
出参的运用

4、一道大厂指针笔试题

5、指针数组、数组指针

指针数组:保存指针的数组
数组指针:保存数组的指针
三值合一:
&arr[0]首元素地址
arr数组名
&arr数组地址
&arr[0]和&arr区别

6、指针函数、函数指针

函数指针:指向函数的指针
案例代码:
指针函数:返回指针的函数
案例代码

7、注意细节

1、指针减指针是元素的个数
2、指针之间没有加法操作
3、指针被强转之后不能相减(二义性)
4、函数指针不能+1

8、复杂指针解析

1、如何定义一个函数的返回值为指向函数的指针
2、相关复杂指针

9、泛型指针

9.1 void*概述

上善若水
可以指向任何类型,所以为泛型指针
物归原主
如果要使用void*指针,需要重新强转为具体类型,方可使用,不可直接对void*进行使用

9.2 void*的应用-memcpy()

memcpy 是 C/C++ 中用于按字节复制指定长度内存数据的函数,不检查内存重叠,需保证目标空间足够

内存重叠问题:

mem_cpy(str+2,str,4);
此时会发生内存重叠,如果没有处理内存重叠,则得到的目标字符串是“abababghijk”,和预想差异过大。
notion image
如何来判断内存是否重叠?以及如何处理呢?
首先模拟出所有情况,发现只有这六种情况,当且仅当发生第二种,也就是pDest<(pSrc+count)会发生内存重叠。
解决办法,先将目标和源都进行后移,然后逆着进行拷贝,这样就不会发生内存重叠了。
notion image

9.3 void*的应用-快速排序

上一篇
c语言-进阶
下一篇
c语言-数组操作

Comments
Loading...