zoukankan      html  css  js  c++  java
  • 指针 (卑微醇醇初学指针的崩溃啊)

     
    用指针实现整行数组的交换:
    用的是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])
      这样每一行往那里传。可以实现每一行中的比较。
       
  • 相关阅读:
    设计模式_2_简单工厂、工厂方法、抽象工厂比较
    SQL模拟padding函数
    MySqlHelper c#访问MySql的工具类
    常见数据库设计(1)——字典数据
    常见数据库设计(2)——历史数据问题之单记录变更
    设计模式_1_单例模式
    代码调用存储过程超时,SQL Server Management Studio里运行很快 (改进)
    转:Rowid和Rownum区别
    Oracle数据库中system和sys的区别
    转:Python之全局变量
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/11965624.html
Copyright © 2011-2022 走看看