1.7 C之 指针与函数传参(挺骚)

前置++和后置++的区别
前置++称为前自加,后置的++称为后自加。其计算效果均为操作数自加一。
当单独一个语句的时候没有区别,如果用在表达式中:
i++是先自加,然后在取i的值做计算。
int i =2, j;
如果
j = i++;
那么先取i的赋值给j,于是j值为2,i值再自加,i=3。
如果
j =++i;
那么i先自加,得到i = 2,然后再取i计算,j值为3。
函数传参中使用的指针
int add(int a,int b)函数传参使用了int型数,本身是数值类型。实际调用该函数时,实参将自己拷贝一份,并将拷贝传递给形参进行运算。实参自己实际是不参与的。所以,在函数中,是没发改变实参本身的。
#include<stdio.h>
int main(void)
{
int x,y;
x = 5;
y = 3;
printf("before swap: x = %d,y = %d.\n",x,y);
swap(x,y);
printf("after swap: x = %d,y = %d.\n",x,y);

        }
        //在函数内部,交换a和b的值
        //实际测试结果失败,并没有交换。
        //原因:C语言中,函数调用时,实参传递给形参实际是传值调用。也就是说,实参x和y将自己的值拷贝一份传给形参a和b,在子函数swap中实际交换的是a和b,而不是实参x和y,因为函数执行完后,x和y的值依然,并没有被交换。
        int  swap(int  a,int  b)
        {
              int swap;
                    temp = a ;
                    a = b;
                    b = temp;

                    return  0;
        }

        ______________________________________________
        //在函数内部,交换a和b的值。
        //测试结果:交换成功。
        //原因:c语言函数调用时,一直都是函数调用。也就是实际传递的一直都是实参的拷贝。但是本函数中形参和实参都并不是x和y,而是x和y的地址值。这样让我们在函数中通过间接访问*p的方式,在函数内访问到了函数外面调用时的实参。
        #include<stdio.h>
        int main(void)
        {
                int x,y;
                x = 5;
                y = 3;
                printf("before swap: x = %d,y = %d.\n",x,y);
                swap_pointer(&x,&y);
                printf("after swap: x = %d,y = %d.\n",x,y);

        }

        int  swap_pointer(int *p1,int *p2)
        {
                int temp;
                temp= *p1;    //实际调用时,p1得到的实参是x的地址&x, *p1代表的就是x
                *p2 = *p2;
                *p2 = temp;

                return  0 ;
        }

原文地址:https://blog.51cto.com/14762640/2485069

时间: 2024-10-10 12:48:30

1.7 C之 指针与函数传参(挺骚)的相关文章

关于函数传参--传指针,传引用

今天和同学讨论到指针和引用的传递问题,有些想法从推理上讲是正确的,但是因为是推理,说出自己观点的时候不是那么有底气,本着实践是检验真理的唯一标准的原则,在电脑上敲了几段代码,验证了推理的正确性. 先上代码,再分析. 代码1: void Swap0(int a1,int b1){ int temp; temp=a1; a1=b1; b1=temp; } void Swap1(int *a1,int *b1){ //交换地址 int *temp; temp=a1; a1=b1; b1=a1; } v

python函数传参是传值还是传引用?

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

函数传参课后练习—JS学习笔记2015-6-7(第51天)

老师的课后作业练习,看代码(最贵价格那个没有实现): 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>J函数传参——商品价格计算</title> 6 </head> 7 8 <body> 9

数据类型回顾——函数传参之商品价格计算—JS学习笔记2015-6-6(第50天)

经常我们可以看到很多网站会有多个相同功能的模块,比如淘宝首页的轮播,比如新浪首页的tab切换: 那么可以看出这些地方在HTML结构上是类似的,所以我们可以考虑用一块功能代码去实现,而不同是仅仅是传递参数的不同: 例如: 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

[Java]_函数传参的疑惑与思考

问题来源于leetcode上的两道题 Path Sum I && II,分别写了两个dfs. 1 void dfs(TreeNode node , int sum , ArrayList<Integer> curPath) 2 void dfs(TreeNode node , int sum , boolean ifExist) 问题:在1号中我可以在方法中修改curPath,在结束函数调用时,变量修改仍然生效.   在2号问题中,我即使在函数中修改了ifExist,结束函数调

Date对象,封闭空间,函数传参和封装,获取非行间样式,字符串操作

一.Date对象 1. 获取 oDate.getFullYear() 获取年份 oDate.getMonth()+1  获取月份( 0-11)----->1-12 oDate.getDate()  获取日 1-31 oDate.getHours() 获取小时 oDate.getMinutes() 获取分 oDate.getSeconds() 获取秒 oDate.getMilliseconds();   //毫秒 oDate.getDay() 获取星期几 0-6     0:星期天 例:数码时钟

JavaScript,数组和函数传参 笔记

函数返回值 return  一个函数只有一种返回值 函数传参 可变参,不定参 arguments 提取行间样式 style 提取非行间样式currentstyle  不兼容   getComputedstyle可在不兼容浏览器中使用  在写程序的时候  可用if函数处理兼容问题 在提取非行间样式的时候,复合样式(如:border,backgrund)不可提取,单一样式( height,width)可提取 数组的使用 定义  var arr=[12,5,8,9] var arr=new Array

Javascript 之《函数传参到底是值传递还是引用传递》

前言 这个问题其实困惑了我好久,但是在实际使用中总是得过且过,不想去深究.由于这种态度,在学习 Javascript 过程中,水平一直都是出于半桶水状态,很多概念和原理似懂非懂,模糊不清. 所以,写了一系列的<Javascript 之 ...>就是为了端正态度,认真地研究一下 Javascript 的特性和原理,夯实基础. 今天,这一篇探究的是函数传参的问题:函数传参到底是传值还是传的引用? 1.如果是引用传递 var name = 'JS'; function changeName(name

php如何向js函数传参的几种方法

在php编程中向js函数传参可以使用$_POST也可使用$_SESSION[' '],也可用echo语句进行输出 <?php echo "<script>test('$_POST[userid]');</script> ";?>在上面的$_POST['']也可适用$_SESSION[' '];<?php $para = "hello boby!"; echo $para; // www.jbxue.comecho "