《C语言程序设计》指针篇<一>

指针

  • 指针是C语言的精华,同时也是其中的难点和重点,我在近日对这一部分内容进行了重新的研读,把其中的一些例子自己重新编写和理解了一遍。此篇博客的内容即是我自己对此书例子的一些理解和总结。

一.大问题:指针是什么?

我的理解:
变量的本质即内存,指针即访问变量的地址。利用指针来 <间接访问> 变量。
定义一个指针,p是指针变量名,系统自动为其分配内存,存放的是其指向的变量(内存)的地址。
例如:

1> int a=4;
2> int *p;
3> p=&a;

上述程序定义一个变量a,系统自动为其分配内存,那么这个内存的名称就是a,其存放的值是4。
再定义一个整形指针p,系统也为其分配内存(根据指针的类型分配不同大小的内存单元,例如此处指针为int类型,计算机为其分配4个字节),该内存里存放的是指向名称为a的内存的地址

  • 变量的本质是什么?-变量名只是一个代号,变量的本质就是内存。
  • 指针保存的是什么?-指针保存的是内存地址。

这样来看,会不会对指针理解更加清楚一点呢?

草图:
待解决

二.指针变量

  • 使用指针变量
  • 定义指针变量
  • 引用指针变量
  • 指针变量作为函数参数
1.int *p1,*p2; p1-p2是什么?
#include<stdio.h>
int main()
{
    int a[4]={
    3,4};
    
    int *p1=&a[0],*p2=&a[1];
    printf("%d %d\n",p1,p2);
    printf("%d ",p2-p1);/*p2-p1=地址之差/数组元素的长度
    就是p1所指向的元素与p2所指向的元素差之间几个元素*/
    return 0;
}

我的理解:
p1指向数组a的首元素a[0],p2指向数组a的a[1],p1-p2代表的是a[0]与a[1]之间相隔几个元素。
输出结果:

计算机自动处理为p2-p1=地址之差/数组元素的长度.而不是简单的地址之差=4.

2.输入三个整数按从大到小的顺序输出.(指针变量作为函数参数)
  • 错误解法:
#include<stdio.h>
void swap(int *p1,int *p2,int *p3)
{
    int *p;
    if(*p1<*p2)
    {
        p=p1;
        p1=p2;
        p2=p;
    }
    if(*p1<*p3)
    {
        p=p1;
        p1=p3;
        p3=p;
    }
    if(*p2<*p3)
    {
        p=p2;
        p2=p3;
        p3=p;
    }
}
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    printf("%d %d %d\n",a,b,c);
    
    int *point_1=&a,*point_2=&b,*point_3=&c;
    
    swap(point_1,point_2,point_3);
    printf("%d %d %d\n",*point_1,*point_2,*point_3);
    return 0;
}

输入样例:7 8 9
输出结果:

  • 正确解法:
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值