• 《挑战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; 


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

     
     
  • 相关阅读:
    c++局部变量在外可用的方法
    Git更新代码到本地
    Redis客户端断开重连功能要点
    android make
    cb-A10 调整分区
    linux内核学习:中断中推后执行的部分
    linux内核学习:中断
    linux内核学习:进程调度
    linux内核学习:进程管理
    ubuntu 安装android源码编译环境 遇到的问题
  • 原文地址:https://www.cnblogs.com/landv/p/11184622.html
Copyright © 2020-2023  润新知