zoukankan      html  css  js  c++  java
  • 实验十:指针(1)

    地址和指针:地址和指针是计算机中的两个重要概念,在程序运行过程中,变量或者程序代码被存储在以字节为单位组织的存储器中。在C语言中,如果定义了一个变量,在编译时就会根据该变量的类型给它分配相应大小的内存单元。

    **要注意区分内存单元的内容和内存单元的地址。
            前面学过把地址作为scanf()的输入参数的用法:例如:函数调用scanf(“%d”,&n),把输入的值存储到变量n所在的内存单元里,其中&n表示变量n的内存地址或存储位置。这里的&称为地址运算符,&是一元运算符。

    指针变量的定义:如果在程序中声明一个变量并使用地址作为该变量的值,那么这个变量就是指针变量。
                   定义指针变量的一般形式为:
              类型名      *指针变量名;

              类型名指定指针变量所指向变量的类型,必须是有效的数据类型,如int,float,char等。指针变量名是指针变量的名称,必须是一个合法的标识符。

              定义指针变量要使用指针声明符*。如:int  i,*p;

              在定义指针变量时,除了指针变量名,还需要说明该指针变量所指向的内存空间上所存放数据的类型。

    **指针声明符*在定义指针变量时被使用,说明被定义的那个变量是指针。

             如果未加声明,把指针和指针变量同等对待,都是指存放内存地址的指针变量

    **定义多个指针变量时,每一个指针变量前面都必须加上*。
             指针变量的类型指它所指向的变量的数据类型。

             指针变量也要先赋值再使用,指针变量被赋的值应该是地址。

    **指针p所指向变量的值加1:*p=*p+1
                                             ++*p
                                            (*p)++
                                             *p++等价于*(p++)

    **说完知识点,来提一提作业,都是写加入指针的自定义函数,不能说难也不是不难,总的来说错误还是挺多的:
        1.计算两数的和与差:

    void sum_diff( float op1, float op2, float *psum, float *pdiff )
    {
        *psum=op1+op2;
        *pdiff=op1-op2;
    }

    这个自定义函数还是没有问题的,主要是主函数中 sum_diff(op1,op2,&sum,&diff);看书上这样子写:在函数中调用函数sum_diff()时,将变量sum和diff的地址作为实参,在被调用函数中用形参指针psum和pdiff分别接受地址,并改变了形参所指向变量的值。因此,函数main()中sum和diff的值也随之改变。

       2.利用指针找最大值:

    唯一不大懂的就是为什么自定义函数中用指针变量而不用指针

    void findmax(int *px,int *py,int *pmax)
    {
        if(*px<*py)
            *pmax=*py;
        else
            *pmax=*px;
    }

    这个其实昨天助教老师给了我另一个函数,而我却写错了,内容如下:

    void findmax(int x,int y,int *pmax);

    这个是函数体...

    #include<stdio.h>
    void findmax(int x,int y,int *pmax);
    int main()
    {
        int x,y,*px,*py,max;
        printf("Enter x and y=");
        scanf("%d%d",&x,&y);
        findmax(*px,*py,&max);
        printf("The Max Number Is %d
    ",max);
        return 0;    
    }
    void findmax(int x,int y,int *pmax)
    {
        int x,y,max;
        if(x<y)
            max=y;
        else
            max=x;
    }

    然而这个是有错误的整个函数,其实我还是没有发现错哪了/(ㄒoㄒ)/~~

    3.拆分实数的整数与小数部分:
    函数为void splitfloat (double x, double *intpart, double *fracpart); 

    小数部分=number-整数部分,如果弄懂了前面两个题,也不会很难。

    总结:这章不是很容易,要认真学!!!

  • 相关阅读:
    Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分
    也谈PostgreSQL的Vacuum机制及其最佳实践
    django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS
    Error: Invalid CSS after
    win32-x64-64inding.node is not a valid Win32 application
    Error: Module did not self-register
    数据分析|如何利用BI工具,探索各商品的潜在关联价值
    Python爬虫入门教程 42-100 爬取儿歌多多APP数据-手机APP爬虫部分
    Retrofit的文件上传和进度提示
    Retrofit的文件上传和进度提示
  • 原文地址:https://www.cnblogs.com/jyt1998/p/6108654.html
Copyright © 2011-2022 走看看