指针高级4-没有类型(void)的指针

(1)没有类型的指针的格式

void* 变量名

特点:无法获取数据,无法计算,但是可以接收任意地址。

(2)不同类型指针之间不能互相赋值

int* p1 = &a

char* p3 = p1;

此时用char* p3 = p1; 运行程序会提醒:初始化从int* 到char* 的类型不兼容;

但是又能正常运行,是因为系统自动帮我们进行了强转:

char* p3 = (char*)p1;

所以按照逻辑来说,不同类型的指针之间,是不能互相赋值的,赋值的时候需要强转。

void类型指针因为没有任何类型,所以可以接受任意类型指针记录的内存地址

______________________________________________________________________________________我是分割线

(3)利用void类型指针来交换两个变量记录的值

定义一个无返回值类型的函数swap(),形参分别为void* p1,void* p2,int len。

这里的int len代表的是数据类型字节大小,例如int类型,这里的len就要传递4;

函数体如图:

①、把void类型转换为char类型的指针

char* pc1 =p1;

char* pc2 =p2;

这一步的主要目的是为了方便接下来的int类型的数据转换。

在之前的学习中,int类型内存地址在内存池中占4个字节,每一个字节都是单独的一个块,第一个块被称为首地址,首地址代表整个int类型的地址值,这4个字节一共分为32个bit位,如果想要把一整个int类型的数据进行互换,也就是要按照顺序把这4个字节里面的32个bit全部互换。

所以这里定义char类型的指针变量,是为了进行1个字节1个字节的互换。

②、定义循环,进行字节的替换。

以字节为单位,一个字节一个字节的替换

先要定义一个char类型的变量temp存储指针pc1替换之前的数据。

这里的 i 单纯只是循环的执行次数

由于替换的是int类型,所以i < len(4),循环每完成一次,i就+1

第一次循环从0开始,代表我从第一个字节开始互换,循环每完成一次,char类型指针pc1和pc2就向右移动1个字节,然后开始下一个字节的互换。

以此类推。

这里还涉及到了指定移动的步长,由于是char类型,所以char类型指针变量每+1,移动的步长为1字节。

使用void类型指针用来替换同类型的数据,好处就是这个函数可以根据不同的需求做不同类型的转换。

③、调用函数并打印输出

(4)void类型指针的缺点

无法获取变量里面的数据,也不能进行加、减的操作(因为加、减操作需要明确指针的类型)。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇