zoukankan      html  css  js  c++  java
  • 《挑战30天C++入门极限》在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。

     
     

      在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。

      以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址。

    #include <stdio.h> 
     
    void main(void

     
    void reversal(); 
    static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
    int i; 
    for (i=0;i<10;i++) 

    printf("%d ",a); 

    printf(" "); 
    reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
     
    for (i=0;i<10;i++) 

    printf("%d ",a); 

    printf(" "); 
     

     
    void reversal(x,n) 
    int x[],n; /* 定义形式参数 */

    int m=(n-1)/2; /* 计算10个数需要循环几次,因为是两两调换第一个数组是x[0]故应该是int(9/2) */
    int temp,i,j; /* 建立零时变量temp用于每次交换处理时零时存储x的值 */
    for (i=0;i<=m;i++) 

    j=n-1-i; /* 反向计算出被调换的数组下标,例如x[0] 对应的x[n-1-i]就是x[9] */
    temp=x; 
    x=x[j]; 
    x[j]=temp; 


     
    /* 次题需要注意的是:这里由于a[10]和x[10]是共同享内存地址位的所以进行交换后a[10]的实际值也就发生了改变 */



    #include <stdio.h> 
     
    void main(void

     
    void reversal(); 
    static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
    int i; 
    for (i=0;i<10;i++) 

    printf("%d ",a); 

    printf(" "); 
    reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
     
    for (i=0;i<10;i++) 

    printf("%d ",a); 

    printf(" "); 
     

     
    void reversal(x,n) 
    int *x,n; /* 定义x为指针变量 */

    int temp,*p,*i,*j; /* 这里需要注意的是temp用与交换的时候临时存储数据的 */
    = x; /* 利用指针变量i存储数组a的起始地址 */
    = x + ((n-1)/2); /* 计算最后一次循环的时候数组a的地址 */
    = x + n - 1; /* 计算数组a也就是a[9]的结束地址好用于交换 */
    for (;i<=p;i++,j--) /* 利用循环和指针进行数组元素值的交换 */

    temp=*i; /* 用temp临时存储*i也就是循环中a实际的值 */
    *i=*j; 
    *j=temp; 


     
    /* 此例同样要注意到利用指针进行数组的操作同样改变了实际数组各元素的值 */

     
     
  • 相关阅读:
    MySQL 中无法 insert 文件路径 中的 backward slash的解决方法
    生成颜色代码的 Java程序
    公积金贷款不受影响 组合贷款有特殊
    ADOMD.NET Client Object架构
    心情•笔记20061231
    微软所谓的"无人工介入的自动的机器翻译系统"
    游戏中的微软
    商业智能的个人理解
    无日
    从电影死亡笔记看商业智能在治安领域的应用
  • 原文地址:https://www.cnblogs.com/landv/p/11184622.html
Copyright © 2011-2022 走看看