指针 (卑微醇醇初学指针的崩溃啊)

Posted zhmlzhml

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针 (卑微醇醇初学指针的崩溃啊)相关的知识,希望对你有一定的参考价值。

 
用指针实现整行数组的交换:
用的是memcpy
 
 
 
 
 
  1. #include <string.h>
  2. int main()
  3. {
  4. int a[2][2] = {1,2,3,4};
  5. int t[2];//临时空间。
  6. int i,j;
  7.  
  8. memcpy(t,a[0], sizeof(a[0]));//将第0行的数据放到临时空间。
  9. memcpy(a[0], a[1], sizeof(a[0]));//将第1行数据放到第0行中。
  10. memcpy(a[1], t, sizeof(a[0])); //将保存到t中的数据,即原本的第0行数据,放到第1行中。
  11. }
    注意临时空间定义的也是个数组,但使用的时候也是指针
     
    一个指针指向一个二维数组
     
    #include<stdio.h>
    #include<string.h>
    int sub[5];
    int main()
    {
        float *search(float(*p)[4]);
        void first(float(*po)[4]);
     
        
        float (*po)[4];
        float *p;
        char a[4][20];
        float b[4];
       float score[4][4];//4,5
        for(int i=0;i<4;i++)
        {
            
            scanf("%s",a[i]);//注意这里可以将一个字符串放进一个a[i]中。
            
            scanf("%f",&b[i]);
            for(int j=0;j<5;j++)
            scanf("%f",&score[i][j]);
        }
        po=score;//其实是将一个二维数组的第一行第一个的地址给了Po,所以传的时候相当于传了整个数组。故底下可以使用*(*(p+i)+j)来实现对每个数的取值
        if(choose==1)
             first(po);
    函数是:void first(float(*p)[4])//这个东西就是传一整行的
    {
        for(int i=0;i<=3;i++)
        for(int j=0;j<=3-i;j++)
            {
                
                if(*(*(p+j)+0)<(*(*(p+j+1)+0)))
                {
                    
                    /*int a=*(p+j);
                    *(p+j+1)=*(p+j);
                    *(p+j)=a;
                    */
                    memcpy(sub,*(p+j),sizeof(*(p+j)));//这个函数有他的专场的!
                    memcpy(*(p+j),*(p+j+1),sizeof(*(p+j)));
                    memcpy(*(p+j+1),sub,sizeof(*(p+j)));
                    /*
                        memcpy(t,a[0], sizeof(a[0]));//将第0行的数据放到临时空间。
        memcpy(a[0], a[1], sizeof(a[0]));//将第1行数据放到第0行中。
        memcpy(a[1], t, sizeof(a[0])); //将保存到t中的数据,即原本的第0行数据,放到第1行中。
                    */
                  }
            }
        for(int j=0;j<4;j++)
            for(int i=0;i<5;i++)
                        printf("%f",*(*(p+j)+i));

    }
     
     
    注意地下有这一句:
    for(int i=0;i<4;i++)
    p=search(score+i);
    函数是:float *search(float(*p)[4])
    这样每一行往那里传。可以实现每一行中的比较。
     

以上是关于指针 (卑微醇醇初学指针的崩溃啊)的主要内容,如果未能解决你的问题,请参考以下文章

初学c语言指针问题

指针初学

初学者:空指针异常

智能指针初学

指针与指针变量深度理解及程序举例(初学者)

指针(初学者)