学习记录第十三天

指针

        指针是一个是一个变量,其值是另一个变量的内存地址。简单来说,指针“指向”数据的存储位置。通过使用指针,程序员可以直接访问和操作内存,这在很多情况下可以提高程序的效率和灵活性。

在C语言中,你可以声明一个指针变量,例如,如果你想要一个指向整型数据的指针,你可以这样声明:

int *ptr;

这里,*ptr 表示ptr是一个指针,而int是基类型,表示ptr将指向一个整型数据的地址。
当你需要让这个指针指向一个具体的整型变量时,你可以这样做:

int num = 10; // 声明一个整型变量
ptr = #   // 让ptr指向num的地址

这里,&num 是取地址操作符,它返回num变量的内存地址。
你可以通过指针来访问或修改它所指向的变量的值:

printf("%d\n", *ptr); // 输出num的值,即10
*num = 20;             // 修改num的值为20

注意,访问未初始化的指针或野指针,可能会导致程序崩溃

int *p;
*p = 20;   //指针未进行初始化,直接进行赋值可能会导致程序崩溃
int i;
int *p = &i;
i = 100;        //直接访问
*p = 200;       //间接访问

1.通过指针变量中的值到内存空间中定位

2.从定位处开始向后偏移sizeof(类型)

3.将偏移好的那部分内存空间当作是一个基类型变量来看

数组与指针

        数组名作为地址:一维数组的名称在大多数表达式中会被自动转换为指向数组第一个元素的指针。例如,如果有一个声明为 int arr[10] 的数组,表达式 arr 的值就是 arr[0] 的地址。

int a[] = {1,2,3,4,5,6,7,8,9};
int *p;
p = a;  //因为a为数组首元素地址,所以可直接将a赋值给p

        指针算术:由于数组在内存中是连续存放的,您可以通过指针算术来访问数组的其他元素。例如,arr[i] 等价于 *(arr + i),其中 i 是索引。同样,arr + 1 指向数组的第二个元素。

        数组作为函数参数:当一维数组作为参数传递给函数时,实际上传递的是数组首元素的地址。因此,函数参数可以声明为数组类型,但在函数内部,这个参数会被当作指针来处理。

void array(int *a,len)

遍历数组

void printArray(int *a,int len)
{
    int i;
    for(i = 0;i < len ;++i)
    {
        printf("%d,",*(a+i));
    }
    printf("\b \n");
}

交换

void swap(int *a,int *b)
{
    int t;
    t = *a;
    *a = *b;
    *b = t;
}

选择排序

oid choiceSort(int *a,int len)
{
    int i,j;
    for(i = 0;i < len - 1;++i)
    {
        for(j = i + 1;j < len;++j)
        {
            if(*(a + i) > *(a + j))
            {
                swap(a + i,a + j);
            }
        }
    }
}

冒泡排序

void bubbleSort(int *a,int len)  //冒泡
{
    int i,j;
    for(i = len - 1;i >= 0;--i)
    {
        for(j = 0;j < i;++j)
        {
            if(*(a + j) > *(a + j + 1))
            {
                swap(a + j,a + j + 1);
            }
        }
    }
}

插入法排序

void insertionSort(int *a,int len)  //插入
{
    int i,j,t;
    for(i = 1;i < len;++i)
    {
        t = *(a + i);
        j = i;
        while(j >0 && *(a + j - 1) > t)
        {
            *(a + j) = *(a + j - 1);
            --j;
        }
        *(a + j) = t;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值