目录
1、万能指针
"万能指针" 这个术语通常指的是 void*
类型的指针。void*
是一个特殊类型的指针,它可以指向任何类型的数据,但是在被解引用之前,必须被转换为正确的类型。这是因为 void*
只是一个地址,它不包含关于它所指向数据类型的任何信息。
当你想初始化一个 void *
类型的指针变量时,你应该确保它指向一个有效的内存地址或者表示它不指向任何地址(即它是一个空指针)。
使用 void*
(万能指针)的简单示例:
2、const修饰的指针变量
const
关键字用于声明一个不可变的量,即常量。
当const
用于修饰指针变量时,它有两种主要的用法:
一是声明一个指向常量的指针。
二是声明一个指针常量。
指向常量的指针
当一个指针被声明为指向常量时,你不能通过这个指针来修改它所指向的数据。这意味着指针指向的内容是只读的。
ptr
是一个指针,它可以指向一个整数,但是你不能通过这个指针来修改它所指向的整数的值。
示例:
指针常量
当const
直接放在指针声明符*
之前时,它表示指针本身是一个常量,即指针的值(它所指向的地址)在初始化之后不能被修改。
ptr
是一个常量指针,它被初始化为指向x
的地址。之后,你不能将ptr
重新指向其他地址(比如&y
)。但是,你可以通过ptr
来修改它所指向的值(如果它不是指向一个常量的话)。
同时修饰指针和指向的内容
用const
修饰指针本身和它指向的内容,这样你就既不能修改指针指向的内容,也不能修改指针本身的值。
ptr
是一个常量指针,指向一个整型常量。因此,你既不能通过ptr
来修改x
的值,也不能将ptr
重新指向其他地址。
3、指针作为返回值
指针可以作为函数的返回值。当一个函数返回一个指针时,它实际上返回的是内存中某个对象的地址。
通常用于在函数内部分配内存(例如使用malloc
),并将这块内存的地址返回给调用者。或者,它也可以用于返回指向函数内部某个对象的指针,以便在函数外部访问该对象。
-
#include <stdio.h>
和#include <stdlib.h>
:包含标准输入输出库和标准库,分别用于printf
和malloc
/free
函数。 -
createInteger
函数:- 它接受一个整型参数
value
。 - 使用
malloc
在堆上分配足够的内存来存储一个整数。 - 如果内存分配成功,将
value
存储在分配的内存中,并返回指向这块内存的指针。 - 如果内存分配失败(
malloc
返回NULL
),则返回NULL
。
- 它接受一个整型参数
-
main
函数:- 调用
createInteger
函数,并将返回的指针存储在returnedPtr
中。 - 检查
returnedPtr
是否为NULL
。 - 如果不是
NULL
,则通过解引用指针(*returnedPtr
)访问并打印存储的整数值。 - 使用
free
函数释放之前通过malloc
分配的内存,避免内存泄漏。 - 如果
returnedPtr
是NULL
,则打印一条错误信息。
- 调用
注意:在实际编程中,总是检查内存分配是否成功是一个好习惯。此外,在使用完动态分配的内存后,务必释放它,以避免内存泄漏。