精华内容
下载资源
问答
  • 使用指针变量作为函数参数|地址传递与指针传递实例总结地址传递传递错误写法1错误写法2 地址传递 指针类型可以作为函数参数的类型,这时视为把变量地址传入函数。如果在函数中对这个地址的元素进行改变,原先的...

    使用指针变量作为函数参数|地址传递与指针传递实例总结

    地址传递

    指针类型可以作为函数参数的类型,这时视为把变量的地址传入函数。如果在函数中对这个地址的元素进行改变,原先的数据就会确实地被改变。

    #include <stdio.h>
    
    void change(int *p) {
        *p = 233;
    }
    
    int main() {
        int a = 1;
        int *p = &a;
        change(p);
        printf("%d\n", a);
        return 0;
    }
    

    输出结果:
    233

    分析:将int型的指针变量p赋值为a的地址,通过change函数把指针变量p作为参数传入,此时传入的实际上是a的地址。在change函数中,使用p修改地址中存放的数据,实际上修改了a本身。当最后输出a时,就已经是改变了的值。

    值传递

    #include<stdio.h>
    
    void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }
    
    int main() {
        int a = 1, b = 2;
        swap(a, b);
        printf("%d %d\n", a, b);
        return 0;
    }
    

    输出结果:
    1 2

    分析:函数在接收参数时进行的是单向一次性的值传递
    在调用函数时,只是把参数的值传进去,相当于产生了一个副本,对这个副本的操作不会影响main函数中a、b的值。只有在获取地址的情况下对元素进行操作,才能真正地修改变量
    改进代码如下:

    #include<stdio.h>
    
    void swap(int *a, int *b) {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    
    int main() {
        int a = 1, b = 2;
        int *p1 = &a, *p2 = &b;
        swap(p1, p2);
        printf("%d %d\n", a, b);
        return 0;
    }
    

    输出结果为2 1,成功达到修改变量的目的。

    错误写法1

    #include<stdio.h>
    
    void swap(int *a, int *b) {
        int *temp;
        *temp = *a;
        *a = *b;
        *b = *temp;
    }
    
    int main() {
        int a = 1, b = 2;
        int *p1 = &a, *p2 = &b;
        swap(p1, p2);
        printf("%d %d\n", a, b);
        return 0;
    }
    

    运行截图:
    在这里插入图片描述

    错误原因:在定义int*型的指针变量temp时,temp没有初始化,即指针变量temp中存放的地址是随机的,如果随机地址指向系统工作区,就会出错,而指向系统工作区的概率极大。

    改进代码:

    #include<stdio.h>
    
    void swap(int *a, int *b) {
        int x;
        int *temp = &x;
        *temp = *a;
        *a = *b;
        *b = *temp;
    }
    
    int main() {
        int a = 1, b = 2;
        int *p1 = &a, *p2 = &b;
        swap(p1, p2);
        printf("%d %d\n", a, b);
        return 0;
    }
    

    错误写法2

    #include<stdio.h>
    
    void swap(int *a, int *b) {
        int *temp = a;
        a = b;
        b = temp;
    }
    
    int main() {
        int a = 1, b = 2;
        int *p1 = &a, *p2 = &b;
        swap(p1, p2);
        printf("%d %d\n", a, b);
        return 0;
    }
    

    输出结果:
    1 2
    分析:错误地认为直接把两个地址交换,交换后元素也交换了,认为swap函数交换完地址后main函数的a与b地址也被交换。由于函数参数的传送方式是单向一次性的,main函数传给swap函数的地址其实是一个无符号整型的数,其本身也与普通变量一样只是值传递,swap函数对地址本身进行修改并不能对main函数里的地址进行修改,能够使main函数里的数据发生变化的只能是swap函数中对地址指向的数据进行的修改,对地址本身进行修改其实与之前对传入的普通变量进行交换的函数一样的作用,都只是副本,无法对数据产生实质性的影响。

    展开全文
  • 1.形式参数和实际参数1.1形式参数形参出现在被调函数当中,在整个函数体内都可以使用。形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存...传递方式有两种:值传递地址传递方式。2.变量作为...

    1.形式参数和实际参数

    1.1形式参数

    形参出现在被调函数当中,在整个函数体内都可以使用。形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存单元。调用结束内存单元被释放,故形参只有在函数调用时有效,调用结束时不能再使用。

    1.2实际参数

    实参出现在主调函数当中,当函数调用时,朱调函数把实参的值传送给被调函数的形参,从而实现函数间的数据传递。传递方式有两种:值传递和地址传递方式。

    2.变量作为函数参数

    当形参定义为变量时,实参可以是常量、变量和表达式,这种函数间的参数传递为值传递方式。值传递的特点是参数的“单向传递”;

    int swap(int a,int b)

    {

    int temp;

    temp=a;

    a=b;

    b=temp;

    return 0;

    }

    int main (void){

    int a=3,b=4;

    swap(a,b);

    }由于是值传递,单向传递,并不会改变a,b的值。

    3.数组作为函数参数

    3.1数组元素作为函数参数

    数组元素又称为下标变量,它具有普通变量的一切性质,因此数组元素作为函数的实参进行数据传递是与普通变量没有任何区别,也是值传递

    int swap(int a,int b)

    {

    int temp;

    temp=a;

    a=b;

    b=temp;

    return 0;

    }

    int main (void){

    int a[]={3,4};

    swap(a[0],b[0]);

    }

    同样是值传递并不会改变a[0]的值。

    3.2一维数组名作为函数参数

    数组名是一个地址,是数组的首地址,因此用数组名作为函数的参数进行数据传递时,执行的是地址传递方式。所谓地址传递,顾名思义实参传递的不是数据本身,而是数据存在的地址。函数调用时,把数组名即数组的首地址作为实参传递给形参(必须是可接受地址的数组名或者指针变量),形参数组名取得首地址后就有了实在的数组,这时实质上实参和形参是同一个数组,指向同一段存储空间,实参的改变就是对形参的改变,所以传址方式可看成是数据进行了“双向传递”。

    3.3数组指针,即数组元素的地址作为函数参数

    由于数组元素的地址的本质仍然为地址,所以属于地址传递方式。

    int swap(int *a,int *b)

    {

    int temp;

    temp=*a;

    *a=*b;

    *b=temp;

    return 0;

    }

    int main (void){

    int arr[] = {1,2};

    int *a = &arr[0];

    int *b = &arr[1];

    swap(a,b);

    }

    重点:

    数组元素(下标变量)作为函数的参数进行的数据传递是值传递方式,数组名(数组首地址)、数组元素的地址(&arr[0])作为函数参数进行的数据传递是地址传递方式。

    实参为数组名是,形参接收时可以有三种形式:带下标的数组名(arr[0])。不带下标的数组名(arr)、可接收地址值的指针变量名(*a)。由于是参数组和形参数组都指向同一段内存单元,故它们操作的是同一批数据,所以形参的改变就是改变了实参中的数据。

    原文:http://blog.csdn.net/qq_30351805/article/details/51344316

    展开全文
  • ansible-playbook yml脚本传递变量参数的几种方法 playbook 脚本内容 --- - hosts: "{{ hosts }}" # 变量 remote_user: 普通用户 become: yes become_method: sudo tasks: - name: deliver authorized_keys ...

    ansible-playbook yml脚本传递变量参数的几种方法

    playbook 脚本内容

    ---
    - hosts: "{{ hosts }}"  # 变量
      remote_user: 普通用户
      become: yes
      become_method: sudo
    
      tasks:
        - name: deliver authorized_keys
          authorized_key:
            user: "{{ user }}"  # 变量
            key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
            state: present
            exclusive: yes
    

    命令行传参4种方式

    ## 执行playbook脚本传参
    
    # -e (优先级最高)
    ansible-playbook -e "user=zwl hosts=dny" vars-test.yml
    
    # --extra-vars (key=value)
    ansible-playbook --extra-vars "user=zwl hosts=dny" vars-test.yml
    
    # --extra-vars (json格式)
    ansible-playbook --extra-vars "{'user':'zwl','hosts':'dny'}" vars-test.yml
    
    # --extra-vars (使用@语法 json文件)
    ansible-playbook --extra-vars "@var.json" vars-test.yml
    # var.json文件内容
    {'user':'zwl','hosts':'dny'}
    

    hosts文件传参

    ## /etc/ansible/hosts 文件
    [test]
    192.168.1.123 user=zwl hosts=dny
    

    hosts文件里面写[groupname:vars]传参

    ## /etc/ansible/hosts 文件
    [test]
    192.168.1.123
    
    [test:vars]
    user=zwl hosts=dny
    

    playbook文件中vars指定

    ---
    - hosts: "{{ hosts }}"  # 变量
      remote_user: 普通用户
      become: yes
      become_method: sudo
      
      vars:
      - user=zwl
      - hosts=dny
      
      tasks:
        - name: deliver authorized_keys
          authorized_key:
            user: "{{ user }}"  # 变量
            key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
            state: present
            exclusive: yes
    
    展开全文
  • 事先一定要明确(,中作为则如有讨论会议分组。案的下列叙述中利用关于与利用档档案,语言的对应形错误的是。西餐中的讲究喝汤很有,...普通设备办公购买大型的缺点是。变量难有案信现阶息数字化面临段档的困。容应审...

    事先一定要明确(,中作为则如有讨论会议分组。

    案的下列叙述中利用关于与利用档档案,语言的对应形错误的是。

    西餐中的讲究喝汤很有,函数函数汤匙应该舀出。性鲜形象造独明的为塑文化特的和个企业企业,识别系统须遵循(则进行划时)原)策企业企业。性计)写专题划应法多采取(。文件会议的归档应。

    585680.jpg

    调用的实免(喝咖应避啡时。示方暂时离开法是的表。

    普通设备办公购买大型的缺点是。

    变量难有案信现阶息数字化面临段档的困。

    容应审核包括的内,参参之传递案进行全面审备方核议筹对会。

    中作为则内容《事况记包含录表故情有(》的企业。

    在商务活动中,语言的对应形设备使用式是最常见方获得权的。

    性鲜形象造独明的为塑文化特的和个企业企业,识别系统须遵循(则进行划时)原)策企业企业。

    伤情况报填写《工告表,函数函数姓名将涉及()的。

    性计)写专题划应法多采取(。

    式来许多)模激励用(员工常运企业,调用的实目前。

    普通还要。

    入计项将再逐划表其填,变量表时填写计划,算各问向完成阶段间工作应从的时的时前推,当确定后。

    人类现文明它是的体,参参之传递选而逐渐止规为举经过建立范的遴的行起来,是人们在往中际交礼仪国际长期的国。

    中作为则拟办写于意见要填。

    安全型会康与中大保证为了会者议与的健,先安排好一般应事。

    内容是(下列不属记部于版分的。

    展开全文
  • 普通数据类型传递的是值 /** * 全局作用域、函数变量、函数内部作用域 * */ let a = 10 let b = 1 ...// 记住, 普通数据类型传递的是参数的值,不是参数地址,所以,不会修改参数真正的数据 sum(a.
  • java中对象作为参数传递一般是引用传递,基本变量传值方式是值传递。但是字符串作为一个对象传递却意外的是值传递。先定义值传递意义:就是将原先的基本变量或者引用拷贝一份,作为参数传递给函数。特点是当函数里面...
  • 转载一篇好文章,小修改了下,2011年新写的,强大~在各种语言中,输入参数传递方法(地址传递、值传递)各有不同。如:VB :默认为地址传递,可以指定用值传递C: 普通方式实现值传递,指针方式实现地址传递C++:比 C ...
  • 而数组作为函数参数传递,值传递就是指针地址的传递,而这就与普通参数不一样了;因为数组的数据太多了,将其一一赋值既麻烦又浪费空间,所以数组作为参数传递给函数的只是数组首元素的地址,函数在需要用到后面元素...
  • 导语:C语言中函数之间的数据传递方式有值传递、引用传递地址传递。下面就由小编为大家介绍一下C语言中函数之间地址传递方式,欢迎大家阅读!1 函数之间数据传递方式分类C语言程序是由函数组成的。设计C语言程序时...
  • Java参数传递分析

    千次阅读 2021-02-28 06:08:03
    Java之中的参数传递,只有按值传递!!!传递类型按值传递:就是把原来的参数的值,拷贝一份,将这个拷贝的值修改,而原来的旧的值不会修改。引用传递:就是将参数的地址拿来使用,不去拷贝,直接在这个地址上操作,...
  • jQuery很多方法是可以传入一个对象做参数的,例如 $.get(url, {name: “aa”}), $.animate({width:”300px”}, 300 );等等这些。可是实际使用时候,直接把{}参数写入方法,则{}的key是固定的,不可以是变量。举例,...
  • 一、值传递和指针传递的概念(一)值传递传递,即按值传递参数,按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变...
  • C语言函数调用与参数传递函数是C语言中的基本组成单位,一个较大的C程序一般可分为若干个程序模块,实现某一特定功能的模块主要由函数来完成。下面是小编收集整理的C语言函数调用与参数传递,欢迎阅读,希望大家能够...
  • 浅谈Python 参数变量

    2021-01-11 23:00:10
    形参与实参以及位置参数什么是形参和实参形参:即形式参数,函数定义时指定的可以接受的参数即为形参,比如定义函数时的max(a,b)函数中的a和b就是形参实参:即实际参数,调用函数时传递给函数参数的实际值即为实参,...
  • 文章目录函数也是对象,内存底层分析变量的作用域(全局变量和局部变量)局部变量和全局变量效率测试参数传递传递可变对象的引用传递不可变对象的引用浅拷贝和深拷贝传递不可变对象包含的子对象是可变的情况参数的几...
  • C语言函数参数传递问题导语:在一些C语言教材和参考资料中,常常把函数参数传递分为“数值传递”和“地址传递”两种方式,这种概念模糊的分类方法给初学者的理解造成一定程度的困难。下面就由小编为大家介绍一下...
  • 1、定义和调用函数函数概念:将一些重复使用到...}参数说明:function:为声明自定义函数时必须使用到的关键字。fun_name:为自定义函数的名称。$str1…$strn:为函数的参数。fun_body:为自定义函数的主体,是功能...
  • 浅谈C语言中函数形参为指针类型的参数传递.pdfISSN1009-3044 E-mail: xsjl@ComputerKnowledgeandTechnology 电脑知识与技术第13卷第15期(2017年5月) ...
  • C语言函数参数传递详解

    千次阅读 2021-06-02 11:00:20
    1.值传递和指针传递 (1)值传递:即按值传递参数,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变 ...
  • Python函数的参数传递方式一、普通defadd(a,b):returna+bprint(add(1,2))#输出结果:3二、可选参数defmyjoin(string,sep='_'):#此处sep的缺省参数为"_"returnsep.join(string)print(myjoin(TTTT))#输出结果:T_T_T_T...
  • 需求:对于QAciton triggered信号传递 QWidget类型参数setActiveSubWindow(QWidget*):带参数的槽函数m_Lwindows.at(i):是一个QWidget类型变量。1使用QSignalMapper信号映射器QT助手相关信息如下:Public ...
  • 提供一个思路就是先读取文件内容,然后替换文件内容,再更新文件,文件太大的时候不太适合代码:package indi.andy.platform.web.test;import java.io.BufferedReader;import java.io.BufferedWriter;...
  • 普通变量的渲染render(){const message = "明日ReactNative 大神就要诞生了!"return ({message})}跳转页面时,传递参数1. 修改Home.js文件,用来产生跳转// 在 Home.js 文件中, 增加该代码:onPress = {() => ...
  • php页面跳转传递参数的方法发布时间:2020-08-01 14:39:41来源:亿速云阅读:63作者:清晨小编给大家分享一下php页面跳转传递参数的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!php页面跳转...
  • 在C语言中调用函数交换两个数的数值是一个经典的问题。#includevoid swap(int x,int y);void main(){int a=3,b=4;swap(a,b);printf("a=%d,b=%d\n",a,b);}void swap(int x,int y){int t;...传递是单向的,...
  • 一.类和对象的区别类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体 可以将玩具模型看作是一...定义的位置不同定义在类中的变量是成员变量定义在方法中或者{}语句里面的变量是局部变量2.在内存中的...
  • 1.普通参数传递>>> def add(a,b):return a+b>>> print add(1,2)3>>> print add('abc','123')abc1232.参数个数可选,参数有默认值的传递>>> def myjoin(string,sep='_'):return...
  • matlab gui共有六种参数传递方式和范围各不相同。1。运用gui本身的varain{}、varaout{}传递参数(注:这种方式仅适用与gui间传递数据,且只适合与主子结构,及从主gui调用子gui,然后关掉子gui,而不适合递进结构,即...
  • 比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数。1、常规传递使用普通变量作为函数参数的时候,在传递参数时只是对变量值得拷贝,即将实参的值复制给变参,当函数对变参进行处理时,并不会影响...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 246,449
精华内容 98,579
关键字:

普通变量做参数是地址传递