zoukankan      html  css  js  c++  java
  • 将数组名作为变元传递给“被调用函数“

     #include <stdio.h>
     
     void change_array(char*, int);
     
     int main(void)
     {
         char a[10] = "abcdefg";
         printf("The address of origin a = %p
    ",a);
         change_array(a, 10);
         printf("The address of later a = %p
    ",a);
         printf("%s
    ",a);
         return 0;
     }
     
     void change_array(char *a, int n)
     {
         scanf("%s", a);//To my surprise, this gets the same result as using either a or &a.
         //a = "AAAAA";//a在这实质是指针,因为数组名本来就是一个地址,经过函数调用制作了副本后,
         //a,着实变成了一个指针。in other words,when 'a' refer to "AAAAA",it turn 'a' refer to 
         //a new address.but the origin 'a' is a array not a piont,it failed to change the value of array 'a'.
     }
     //在main函数中,a是一个数组。当用数组名作为变元,传递给change_array函数时,并不是将原来数组名的地址传递过去。
     //而是,制作一个数组名地址的副本,通过这个副本依然可以访问数组。在change_array函数里,传递过来的副本被当成一个
     //指针来处理,所以可以将指针重新指向一个地址,如a = "AAAAA",但不要忘记,在main函数中,a是一个数组,不能修改数组
     //的地址。所以无论在change_array中的指针a指任何地址,在main中的数组a的地址是不变的。——————“可以修改指针包含的地址,
     //不能改变数组名称引用的地址。-->数组与指针的基本区别" 用scanf函数时,实质上是将数组a的地址里的值“踢走”,再将在
     //输入流(键盘)取得的值放进数组a里。
  • 相关阅读:
    Servle生命周期
    Nginx反向代理
    redis
    java二分查找
    Redis集群的数据一致性
    springmvc中controller不要定义全局变量
    elasticsearch-6.7.1和kibana-oss-6.7.1的Linux安装
    centos7.0查看IP,Linux基本命令
    高并发ConcurrentHashMap 1.8的原理
    JS 循环 while for do while
  • 原文地址:https://www.cnblogs.com/busui/p/5698103.html
Copyright © 2011-2022 走看看