迭代:通过上一个元素找到数组的下一个元素。
数组的遍历
void printArray(int *begin, int *end)
{
while(begin <= end)
{
printf("%d\n", *begin);
++begin;
}
}
快速排序
void qSort(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);
qSort(begin, p - 1);
qSort(q + 1, end);
}
二分查找
int *binaryFind(int *begin, int *end, int n)
{
int *mid;
while(begin <= end)
{
mid = (end - begin) / 2 + begin;
if(*mid > n)
{
end = mid - 1;
}
else if(*mid < n)
{
begin = mid + 1;
}
else
{
return mid;
}
}
return NULL;
}
- 两个地址不能相加;两个指针不能相加。
- 两个地址相减时两个指针的基类型必须一致,差值为n个类型的字节。
字符串的遍历
void Puts(char *s)
{
while(*s)
{
putchar(*s);
++s;
}
putchar('\n');
}
字符串有效长度的计算
int Strlen(char *s)
{
if(*s == 0)
{
return 0;
}
else
{
return Strlen(s + 1) + 1;
}
}
用const修饰指针
Const*p=NULL;无法通过该指针再修改它所指向的变量,该指针所指向的变量不能作为左值;
不能通过指针P来修改i的值,只可读而不能修改(问接访问时);
Int*constp=NULL;该指针所指向的地址不可更改;但可以通过该指针去修改该地址的变量的值;
关于万能指针
Void *p
- 可以接收任何类型的地址或指针,而且不产生错误;
- 万能指针不能用于指针运算,主要用于类型的强转;
1.动态内存的分配
1024*1024*8是栈区内的最大内存空间
需要更大的空间时就需要请求一块更大的内存,这样的内存区在堆区;
一般用malloc函数来分配动态内存
- 请求成功时,会返回指针首字节的地址;
- 请求失败时,会返回一个空指针;
在内存空间使用完时,应该对该空间进行销毁采用的函数为(free)(空指针传给free函数并不会导致错误);如果没有进行销毁,会导致内存泄漏;如果请求的空间不够用应采用realloc函数延申开辟的空间,销毁原来的空间;
#include<stdlib.h>
int main(void)
{
int n = 10;
int *p = malloc(n * sizeof(int));
if(p)
{
int i;
for(i = 0;i < n;++i)
{
p[i] = i + 1;
}
for(i = 0;i < n;++i)
{
printf("%d,",p[i]);
}
puts("\b ");
free(p);
p = NULL;
}
return 0;
}