快速排序
void pSort(int *begin,int *end)
{ //快速排序
if(begin >= end)
{
return;
}
int t = *begin; //找基准点,此处找开始为基准点
int *p = begin;
int *q = end;
while(p < q)
{
while(p < q && *q >= t)
{
--q;
}
while(p < q && *p <= t) //将比基准点大的数置于后面,比基准点小的数置于前面
{
++p;
}
swap(p,q);
}
swap(begin,p);
pSort(begin,p - 1); //分为小数组并重新排序
pSort(p + 1,end);
}
const在数组指针的使用
数组中const位置的不同使用
const
关键字与指针
-
const int i
:- 声明一个常量整型变量
i
。i
的值在初始化后无法修改。 - 例如,
const int i = 10;
确保i
总是持有值10
。
- 声明一个常量整型变量
-
const int *p = NULL;
:- 声明一个指向常量整型的指针
p
。通过p
不能修改它所指向的值,但是p
本身可以指向其他地址。 - 例如,若
p
指向一个值100
的常量整型,则不能通过p
修改这个值。
- 声明一个指向常量整型的指针
-
int * const p = NULL;
:- 声明一个常量指针
p
,它指向一个整型变量。p
所指向的地址不可改变,但可以通过p
修改地址处的值。 - 例如,
int a = 10; int b = 20; int * const p = &a;
则p
只能指向a
,但可以通过*p = 20;
修改a
的值为20
。
- 声明一个常量指针
-
const int * const p = NULL;
:- 声明一个指向常量整型的常量指针
p
。既不能修改p
所指向的地址,也不能修改该地址处的值。 - 例如,
const int * const p = &i;
,其中i
的值和p
的地址都不可改变。
- 声明一个指向常量整型的常量指针
字符指针中能否使用const
- 字符串字面量通常存储在只读内存中,不能被修改。尽管在语法上没有
const
修饰的字符串字面量可能不会产生编译错误,但尝试修改它们会导致未定义行为 - 为了防止这种情况,通常使用
const char*
来指向字符串字面量,表示指针所指向的内容不可修改 - 如果字符指针指向的是动态分配的内存(例如使用
malloc
分配)或者是一个字符数组(例如自动或静态变量),则可以修改其内容。
void *
指针
void *p
:- 表示一个通用指针,可以指向任何类型的数据,但不能直接进行指针运算。
- 例如,可以通过
void *p = &i;
将p
指向i
,但不能直接访问*p
的值,需要先进行类转换。
动态内存分配
-
malloc
:- 使用
malloc
函数分配动态内存空间。函数声明为void* malloc(size_t size);
,返回一个指向已分配内存的指针,如果分配失败则返回NULL
。 - 例如,
char *p = malloc(100);
分配了100字节的内存空间。
- 使用
-
free
:- 使用
free
函数释放先前分配的内存。free(p);
释放p
所指向的内存空间,释放后应将p
置为NULL
以避免悬空指针。
- 使用
-
realloc
:- 使用
realloc
函数重新分配已分配的内存大小。函数声明为void* realloc(void* ptr, size_t size);
,用于调整内存块大小。 - 例如,
p = realloc(p, 200);
将p
指向的内存大小调整为200字节。
- 使用