字符串与指针

迭代:通过上一个元素找到数组的下一个元素。

数组的遍历

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. 可以接收任何类型的地址或指针,而且不产生错误;
  2. 万能指针不能用于指针运算,主要用于类型的强转;

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;
}

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值