c语言学习之指针案例

#define _CRT_SECURE_NO_WARNINGS  
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
void test(int* p,int len);  //函数的申明
int main() 
{
    int a[] = { 1,23,45,345,456,645,64,3,534,4,456,2 };
    int x = sizeof(a) / sizeof(a[0]);   //计算数组的长度。
    test(a, x);  //将数组的首地址以及数组长度传入函数

    for (int i = 0; i < x; i++)
    {
        printf("%d ", a[i]);
    }
    
    
    

}
void test(int* p,int len)
{
    int mid = 0;
    int as = 1;
    for (int j = 0; j < (len-1); j++)
    {
        for (int k = j + 1; k < (len); k++)
        {
            if (*p < *(p + as))
            {
                mid = *p;
                *p = *(p + as);
                *(p + as) = mid;
                 
            }
            as++;
        }
        p++;
        as = 1;
    }
    return 0;
}





 
 


此篇代码的目的:通过指针进行整型数组内数字的排序

思路:利用两大指针的下标发生不同的变化,进行比较

重点1:整型数组长度的计算只可以通过sizeof(a) / sizeof(a[0])这种方法因为本质是sizeof()函数计算的是数组的全部字节长度(sizeof(a)表示数组a的全部字节长度,sizeof(a[0])表示数组内一个数字所占用的字节),int型数组一个数字占用4字节,如此就可以计算出数字中有多少个数

重点2:指针就是指针变量,变量中存的是地址(这是核心中的核心),谁问你什么是指针这一句话就可以解释指针

扩展:int *p = &a,表示将a的地址送给p,同时建立指针*p

          *与p是可以分开的,例如:int *     p = &a;也是可行的

          对于指针*p的理解你可以通过想象两列内存第一列内存是p,p中存的是a的地址,第二列内存是a,a中存的是数字,这样就很容易理解了。

          *(p+3);这个指针的下标没有变,仍然指向的是第一位,只是暂时用一下第三个位置的内容。

           p=p+1,这个指针的下标就发生的变化本质p中保存的地址发生的变化

           *p表示p中存的那个地址所在地方的内容

          p = p+1一次移动的字节数关键看是int型还是char型,int型号移动一次4字节数,char型移动一次1字节

          指针的最大优点:可以从改变根部的数字,例如:int a = 10, *p = &a;  *p = 20  //这样a的内容就变成了20,直指内存所在地址的内容,仔细体会它的美妙。

总结:重点2以及其扩展是最重要的,个人感觉只要理解了重点2,基本上就掌握指针了,当然了哪里有不合适的地方或者有疑问请大家多多指教共同进步。

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值