• 数组与指针


    一、指针与数组和指针运算的学习

    1.观看视频:1.1.4指针和数组、1.2.1指针运算

    2.笔记:

     

     

     3.代码列表

    4.遇到的问题

    (1)问题:int i; int  *p=&i; void *q=(void*)p;

                        在1.2.1视频中在讲指针类型转换时表示:“上式没有改变p所指的变量的类型而是让后人用不同的眼光通过p看它指向的变量。”不能理解“后人用不同的眼光通过p看它指向的变量”中的不同的眼光。

            解决:百度。void *q=(void*)p;将指针p的内容赋值给空类型指针q,并没有改变i或指针p的类型,但在用q读取 int i时,将以指针q的void类型读取i。

    (2)问题:在1.1.4代码:

    #include<stdio.h>
    void minmax(int a[],int len,int *max,int *min);
    int main(void)
    {
    int a[]={1,2,3,4,5,6,7,8,9};
    int min,max;
    minmax(a,sizeof(a)/sizeof(a[0]),&min,&max);
    printf("main sizeof(a)=%lu ",sizeof(a));
    printf("min=%d,max=%d ",min,max);
    int *p=&min;
    printf("*p=%d ",*p);
    printf("p[0]=%d ",p[0]);
    printf("a[0]=%d ",a[0]);
    return 0;
    }
    void minmax(int a[],int len,int *min,int *max)
    {
    int i;
    a[0]=1000;
    printf("minmax sizeof(a)=%lu ",sizeof(a));
    *min=*max=a[0];
    for(i=1;i<len;i++){
    if(a[i]<*min)
    *min=a[i];

    if(a[i]>*max)
    *max=a[i];
    }
    }

    为何在自定义函数中执行的a[0]=1000;会影响到主函数的a[0],两个a[0]难道不是局部变量吗?

    解决:视频后续解释①void minmax(int a[],int len,int *max,int *min)中的int a[]是个指针等价与int *a,数组变量为常数指针

                                    ②运算符"[ ]"可以对指针做

               既自定义函数中的int a[]或int *a指向主函数中的int a[],将int a[]或int *a指向的变量视为数组(此题中实际就是数组),a[0]即可取int a[]或int *a所指向的变量(因为其指向的是主函数里的数组故值为a[0])

    二、PTA中的问题

     1、

    错误答案:5 5 6。

    错误原因:将*p的变化与k相分离

    个人理解:*p为k的值,在执行i=++(*p)时*p=k=5+1;i==k==6;而后在执行j=(*p)++时j=k++;j==6,k==7。

    2、

    错误答案:5 2

    错误原因:将指针a、b与p、q混淆

    个人理解:调用自定义函数swap时,将指针a指向指针p,指针b指向指针q。指向t=a;a=b;b=t;后指针a指向q,指针b指向p,自定义函数运行结束,对主函数里的指针p、q无影响。

    3、

    思考查找无果,亟待解决。

  • 相关阅读:
    转:Oracle中的日期和字符串互相转换
    jQuery DateTimePicker 日期和时间插件
    js转换时间戳-转换成 yyyy-MM-dd HH:mm:ss
    linux下载服务器上的文件命令-sz
    eclipse中集成maven
    maven的安装和环境配置
    eclipse复制粘贴变卡的解决办法
    在表单提交之前做校验-利用jQuery的submit方法
    centos7 ipaddr 无法查看虚拟机IP解决办法
    linux下tomcat启动很慢的解决办法
  • 原文地址:https://www.cnblogs.com/zsj123/p/12444120.html
Copyright © 2020-2023  润新知